1. 程式人生 > >opencv 中影象畫素的讀取與顯示

opencv 中影象畫素的讀取與顯示

讀取畫素 

單通道 :  ycbr.at<uchar>(i,j)

三通道:ycbr.at<Vec3b>(i,j)

四通道:ycbr.at<Vec4b>(i,j)

返回的應該是個 <> 中引數的量,Vec3b。

無法直接顯示 ,需要轉換成 int資料型別 ,才能 用cout 輸出。

如果讀取某個元素,需要 末尾加中括號和陣列索引,

注意,如果是4通道的影象, 在讀取元素的時候,需要寫Vec4b, 如果寫成Vec3b,最後的結果會亂掉。 ycbr.at<Vec3b>(0,1)[0]會錯誤讀取為 ycbr.at<Vec4b>(0,0)[3]

,會把第一個畫素的 第四通道作為下一個畫素的第一個通道數值,以此類推。

列印輸出, rgb.at<Vec4b>(i,j)[0]   和 rgb.at<uchar>(i,j) 返回的都是 uchar型別, 直接cout輸出的為字元格式, 轉換為數字的幾種方式:

1、int a = ×××× ;   // 強制賦值給int型變數

2、(int)×××× ;  // int型別強制轉換

3、atoi(××××); // 該轉換函式 會報錯   無法從 unsigned char 型 轉換為 const uchar型

int ele = rgb.at<uchar>(i, j);
cout << "ele: " <<ele << endl;
int a0 = rgb.at<Vec4b>(i, j)[0]; int a1 = rgb.at<Vec4b>(i, j)[1]; int a2 = rgb.at<Vec4b>(i, j)[2];
cout << a0 << " "<< a1<< " " << a2 << endl;
cout << "ele: " << rgb.at<Vec4b>(i, j)[0] << endl;