opencv 中影象畫素的讀取與顯示
阿新 • • 發佈:2019-02-10
讀取畫素
單通道 : 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;