读取像素
单通道 : 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;