現在想做的是將一副影像變換成指定的一種顏色,但并不改變圖片的紋理資訊,應該怎樣做啊?本人初學opencv,不知如何下手,多謝多謝
uj5u.com熱心網友回復:
僅供參考:
//計算影像image(s) 的直方圖
void cvCalcHist( IplImage** image, CvHistogram* hist,
int accumulate=0, const CvArr* mask=NULL );
image
//輸入影像s (雖然也可以使用 CvMat** ).
hist
//直方圖指標
accumulate
//累計標識。如果設定,則直方圖在開始時不被清零。這個特征保證可以為多個影像計算一個單獨的直方圖,或者在線更新直方圖。
mask
//操作 mask, 確定輸入影像的哪個象素被計數
//函式 cvCalcHist 計算單通道或多通道影像的直方圖。 用來增加直方塊的陣列元素可從相應輸入影像的同樣位置提取。 Sample. 計算和顯示彩色影像的 2D 色調-飽和度影像
#include <cv.h>
#include <highgui.h>
int main( int argc, char** argv )
{
IplImage* src;
if( argc == 2 && (src=https://bbs.csdn.net/topics/cvLoadImage(argv[1], 1))!= 0)
{
IplImage* h_plane = cvCreateImage( cvGetSize(src), 8, 1 );
IplImage* s_plane = cvCreateImage( cvGetSize(src), 8, 1 );
IplImage* v_plane = cvCreateImage( cvGetSize(src), 8, 1 );
IplImage* planes[] = { h_plane, s_plane };
IplImage* hsv = cvCreateImage( cvGetSize(src), 8, 3 );
int h_bins = 30, s_bins = 32;
int hist_size[] = {h_bins, s_bins};
/* hue varies from 0 (~0°red) to 180 (~360°red again) */
float h_ranges[] = { 0, 180 };
/* saturation varies from 0 (black-gray-white) to 255 (pure spectrum color) */
float s_ranges[] = { 0, 255 };
float* ranges[] = { h_ranges, s_ranges };
int scale = 10;
IplImage* hist_img = cvCreateImage( cvSize(h_bins*scale,s_bins*scale), 8, 3 );
CvHistogram* hist;
float max_value = 0;
int h, s;
cvCvtColor( src, hsv, CV_BGR2HSV );
cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );
hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1 );
cvCalcHist( planes, hist, 0, 0 );
cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );
cvZero( hist_img );
for( h = 0; h < h_bins; h++ )
{
for( s = 0; s < s_bins; s++ )
{
float bin_val = cvQueryHistValue_2D( hist, h, s );
int intensity = cvRound(bin_val*255/max_value);
cvRectangle( hist_img, cvPoint( h*scale, s*scale ),
cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
CV_RGB(intensity,intensity,intensity), /* graw a grayscale histogram.
if you have idea how to do it
nicer let us know */
CV_FILLED );
}
}
cvNamedWindow( "Source", 1 );
cvShowImage( "Source", src );
cvNamedWindow( "H-S Histogram", 1 );
cvShowImage( "H-S Histogram", hist_img );
cvWaitKey(0);
}
}
uj5u.com熱心網友回復:
可以考慮先轉成灰度圖然后校色uj5u.com熱心網友回復:
敢問樓主,最后采用了什么方案?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/128945.html
標籤:圖形處理/算法
上一篇:Windows下,怎么修改程式在桌面和啟動欄的快捷方式的名字?
下一篇:塊匹配運動估計演算法
