OpenCV mat :: at throw exception

时间:2013-12-08 06:28:46

标签: c++ windows visual-c++ opencv

此代码仅在调试模式下抛出异常。在Release中,它给出了预期的输出0.

#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(){
    Mat image;
    image = Mat::zeros(5,5,CV_8UC1);
    try{
       cout<< image.at<unsigned int>(1,1)<<"\n";
    }
    catch(Exception ex){
       cout<< ex.msg;
    }
    cin.get();
    return 0;
}

抛出的异常文本是

  

OpenCV错误:断言失败(dims&lt; = 2&amp;&amp; data&amp;&amp;(unsigned)i0&lt;   (无符号)si ze.p [0]&amp;&amp; (无符号)(i1 * DataType&lt; _Tp&gt; :: channels)&lt;   (未签名)(size.p [1] *频道s())&amp;&amp;   ((((sizeof(size_t)&lt;&lt; 28)| 0x8442211)&gt;&gt;((DataType&lt; _Tp&gt; :: depth)&amp;((1&lt;&lt;   3) - 1))* 4)&amp; 15)== elemSize1())在未知函数,文件中   C:\用户\添\文件   s \ code \ opencv \ build \ include \ opencv2 \ core \ mat.hpp,第537行

OpenCV的版本是2.4.6,可执行文件动态链接到调试库。

1 个答案:

答案 0 :(得分:5)

  1. 发生异常是因为您将图像定义为unsigned char数组,但在&lt;&gt;处使用了unsigned int功能。在&LT;&GT;必须得到与矩阵相同的类型,即unsigned char。否则会抛出你看到的异常。

  2. 当您向cout函数提供unsigned char时,它假定您尝试打印字符(char)而不是数字。如果要查看其数值,请将其强制转换为int:

    cout&lt;&lt; (int)image.at&lt; unsigned char&gt; (1,1)&lt;&lt; “\ n” 个;