C++ 使用cv::Mat::at运算符访问像素值
我正在使用OpenCV 2.3.1(c++api),当我尝试获取彩色图像的像素值时,我得到了非常奇怪的结果,而不是值编号,输出如下:?,*,|等。例如,代码如下:C++ 使用cv::Mat::at运算符访问像素值,c++,opencv,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 cv::Mat inputImage=c
cv::Mat inputImage = cv::imread("Picture1.jpg");
std::cout << inputImage.at<cv::Vec3b>(x,y)[0] << std::endl; //print B component
cv::Mat inputImage=cv::imread(“Picture1.jpg”);
标准::cout检查
OpenCV中的Vec3b是typedef-Vec-Vec3b代码>。所以,我想你需要在cout过程中转换为整数
类似于std::cout检查
OpenCV中的Vec3b是typedef-Vec-Vec3b代码>。所以,我想你需要在cout过程中转换为整数
类似于std::cout我假设问题的发生是因为您使用了“at(x,y)”。文档中说,第一个参数应该是“基于0的行索引”,第二个参数应该是“基于0的列索引”。因此,您应该调用at(y,x)或at(cv::Point(x,y))。我假设出现问题是因为您使用的是“at(x,y)”。文档中说,第一个参数应该是“基于0的行索引”,第二个参数应该是“基于0的列索引”。所以,您应该在(y,x)或(cv::Point(x,y))调用。是的,您是对的,但我不能打印我想要的所有内容,当我使用两个循环访问每个像素时,程序崩溃,它可能打印出100个值,然后停止:for(int i=0;iOpenCV错误:断言在mat.hppNo中的第552行失败,我刚刚创建了控制台应用程序,并插入了我在这里写的那些行,只是为了看看它是否有效。好的,控制台应用程序,必须使用一些断言函数。无论如何,请检查您的内部循环,以了解(int j=0;iYes,你是对的,但我不能打印我想要的所有内容,当我使用两个循环访问每个像素时,程序崩溃,它打印出大约100个值,然后停止:for(int i=0;iOpenCV错误:断言在mat.hppNo中的第552行失败,我刚刚创建了控制台应用程序,并插入了我在这里写的那些行,只是为了看看它是否有效。好的,控制台应用程序,必须使用一些断言函数。无论如何,请检查您的内部循环,以了解(int j=0;i尽管这是正确的,但发布的代码中可能存在错误(访问.at(x,y)而不是.at(y,x)),打印奇怪字符而不是数字看起来更像是一个打字问题。尽管这是正确的,但发布的代码中可能存在错误(访问.at(x,y)而不是.at(y,x)),打印奇怪的字符而不是数字看起来更像是一个打字问题。