我正在使用cv :: imread来加载图像并对该图像执行一些处理, 但我不知道为什么我无法从imread函数中读取返回Mat的值。 我用Mat.at方法:
Mat iplimage = imread("Photo.jpg",1); //input
for(int i=0;i<iplimage.rows;i++){
for(int j=0;j<iplimage.cols;j++){
cout<<(int)iplimage.at<int>(i,j)<<" ";
}
cout<<endl;
}
但它出现了错误:
OpenCV错误:断言失败(dims&lt; = 2&amp;&amp; data&amp;&amp;(unsigned)i0&lt; (unsigned)size.p [0]&amp;&amp; (无符号)(i1 * DataType&lt; _Tp&gt; :: channels)&lt; (未签名)(size.p [1] * channels())&amp;&amp; ((((Sizeof(size_t)&lt;&lt; 28)| 0x8442211)&gt;&gt;((DataType&lt; _Tp&gt; :: depth)&amp;((1&lt;&lt;&lt; 3)-1))* 4)&amp; ; 15) == elemSize1())是未知函数,文件:“c:\ opencv2.2 \ include \ opencv2 \ core \ mat.hpp”,第517行
但如果我使用直接访问方式就可以了:
Mat iplimage = imread("Photo.jpg",1); //input
for(int i=0;i<iplimage.rows;i++){
for(int j=0;j<iplimage.cols;j++){
cout<<(int)iplimage.data[i*iplimage.cols + j]<<" ";
}
cout<<endl;
}
有谁能告诉我如何使用Mat.at方法访问上面的Mat? 谢谢你的帮助!
答案 0 :(得分:0)
见answer。在你的情况下,返回的Mat是3维的,因此iplimage.at<int>
无法断言,你只需要像所提到的答案解释的那样访问每个通道的强度。
答案 1 :(得分:0)
你试图加载3通道的图像,如果你改成这个Mat iplimage = imread(“Photo.jpg”,0)就可以了; //输入
答案 2 :(得分:0)
我找到了解决方案。这是因为我用过:
inputImage.at<int>(i,j)
或inputImage.at<float>(1,2)
而不是(int)inputImage.at<uchar>(1,2)
或(float)inputImage.at<uchar>(1,2)
对不起我的粗心大意!
答案 3 :(得分:0)
垫iplimage = imread(“ Photo.jpg”,1)以3通道彩色图像读取。您可以使用Mat iplimage = imread(“ Photo.jpg”,0)以灰度读取图像,以便您的iplimage.at(i,j)可以工作。请注意,如果图像为8位而不是.at,则应使用.at。
如果图像不是8位的,则应使用iplimage = imread(“ Photo.jpg”,CV_LOAD_IMAGE_ANYDEPTH)