level 1
Fanbo
楼主
Mat color = imread("./image/lena.jpg", IMREAD_COLOR);
这样color是一个CV_8UC3的Mat
然后用:color.at<uchar>(x,y)获取对应像素点的(B,G,R)数值
然后就会报错,搜了一下大概原因就是at<xxx>中xxx的数据类型有问题;
之后验证了这一点:
我用color.at<uchar>(x,y)调用就没有报错,而且会返回值;
这是代码:
unsigned int myCol = color.cols - 1;
unsigned int myRow = color.rows - 1;
cout << myCol << "\t," << myRow << endl;
cout << "depth:" << color.depth() << endl;
cout << "channels:" << color.channels() << endl;
cout << "color.at<uchar>(myRow, myCol):" << int(color.at<uchar>(myRow, myCol)) << endl;
cout << "gray.at<uchar>(myRow, myCol):" << int(gray.at<uchar>(myRow, myCol)<<endl;
图像就是用的Lena的那一张彩图:
在color.at<uchar>(x,y)那里 我改成 Vec2d,Vec3d都会报错,应该是它认为color变量时单通道:
但是结果显示 确实是 三通道的呀。
2020年04月06日 16点04分
1
这样color是一个CV_8UC3的Mat
然后用:color.at<uchar>(x,y)获取对应像素点的(B,G,R)数值
然后就会报错,搜了一下大概原因就是at<xxx>中xxx的数据类型有问题;
之后验证了这一点:
我用color.at<uchar>(x,y)调用就没有报错,而且会返回值;
这是代码:
unsigned int myCol = color.cols - 1;
unsigned int myRow = color.rows - 1;
cout << myCol << "\t," << myRow << endl;
cout << "depth:" << color.depth() << endl;
cout << "channels:" << color.channels() << endl;
cout << "color.at<uchar>(myRow, myCol):" << int(color.at<uchar>(myRow, myCol)) << endl;
cout << "gray.at<uchar>(myRow, myCol):" << int(gray.at<uchar>(myRow, myCol)<<endl;
图像就是用的Lena的那一张彩图:
在color.at<uchar>(x,y)那里 我改成 Vec2d,Vec3d都会报错,应该是它认为color变量时单通道:
但是结果显示 确实是 三通道的呀。