2014-02-21 88 views
0

的像素的強度我想作出最後決定兩個圖像是否像素的基礎上匹配value.Here是我的代碼的一部分匹配圖像

Vec3b intensity = image.at<Vec3b>(j, i); 
uchar blue = intensity.val[0]; 
uchar green = intensity.val[1]; 
uchar red = intensity.val[2]; 

uchar col=blue+green+red; 

同樣intensity1,藍天,... 。對於其他圖像並比較兩個圖像的「col」。但它沒有給出正確的輸出(無法根據像素值匹配兩個像素),該代碼是否正確計算強度?

+0

它如何「不給予正確的輸出」? – herohuyongtao

+0

我的代碼讀取兩個圖像Mat image = imread(「b.bmp」); Mat templat = imread(「a.bmp」); (i)的條件下輸出相同。當我在「圖像」和「模板」中加載相同的圖像時,以及(ii)當我在「圖像」和「模板」中加載不同的圖像時。 – user3278011

回答

0

因爲你的像素值在unsigned char窗體中,並且你知道char不能被添加...所以請在int中輸入像素值,然後添加。

舉例:你見過這樣的東西嗎sum = 'a' + 'b' + 'c';它有什麼意義嗎?並且通過添加三個uchar值來完成相同的操作。

所以,儘量做到以下幾點:

int col = (int)red + (int)green + (int)blue; 

的是要匹配的像素也這樣做。

但我建議你通過比較它們的hue值來比較像素,這對你來說更容易理解。

step-1:將圖像轉換爲HSV cvtColor(src,dst,CV_RGB2HSV);

2步:然後計算hue淡水河谷(不要忘了做類型轉換如上所述)爲給定的像素

步3:做你希望將其他像素同樣的事情比較。

0

這是更好地使用luma(這是伽馬壓縮R'G'B」彩色視頻分量的加權和)的強度更好的匹配:

intensity = 0.2126 R + 0.7152 G + 0.0722 B 

您還可能有興趣Converting RGB to grayscale/intensity

+0

你爲什麼用一些常數乘以'R,G&B'? – skm

+0

@skm查看我給的鏈接。它專爲伽瑪壓縮而設計。 – herohuyongtao