1

我正在使用 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 吗?

4

2 回答 2

5

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

于 2013-09-03T22:52:46.777 回答
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

于 2012-09-17T14:56:21.487 回答