此代码仅在调试模式下抛出异常。在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,可执行文件动态链接到调试库。
答案 0 :(得分:5)
发生异常是因为您将图像定义为unsigned char数组,但在&lt;&gt;处使用了unsigned int功能。在&LT;&GT;必须得到与矩阵相同的类型,即unsigned char。否则会抛出你看到的异常。
当您向cout函数提供unsigned char时,它假定您尝试打印字符(char)而不是数字。如果要查看其数值,请将其强制转换为int:
cout&lt;&lt; (int)image.at&lt; unsigned char&gt; (1,1)&lt;&lt; “\ n” 个;