无法访问从OpenCV函数返回的Mat值

时间:2012-05-05 04:50:22

标签: opencv matrix

我正在使用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? 谢谢你的帮助!

4 个答案:

答案 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)