使用cv :: Mat :: at运算符访问像素值

时间:2012-09-17 14:51:33

标签: c++ opencv

我正在使用OpenCV 2.3.1(c ++ api),当我尝试获取彩色图像的像素值时,我得到的结果非常奇怪,而不是值数字,输出是这样的:?,* ,|例如,代码如下:

cv::Mat inputImage = cv::imread("Picture1.jpg");
std::cout << inputImage.at<cv::Vec3b>(x,y)[0] << std::endl; //print B component

其中x和y是鼠标回调函数的坐标。我认为类型错了,你知道我还能用什么来代替Vec3b吗?

2 个答案:

答案 0 :(得分:5)

我认为问题正在发生,因为你正在使用“at(x,y)”。文档说第一个参数应该是“基于0的行索引”和第二个“基于0的列索引”。所以,你应该在(y,x)或(cv :: Point(x,y))调用。

答案 1 :(得分:1)

检查http://opencv.willowgarage.com/documentation/cpp/basic_structures.html

OpenCV中的Vec3b为typedef Vec<uchar, 3> Vec3b;。所以,我猜你需要在cout过程中强制转换为整数。

std::cout << (int) inputImage.at<cv::Vec3b>(x,y)[0] << std::endl; //print B component

这样的东西