此代码只在debugging模式下引发exception。 在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; }
抛出exception的文本是
OpenCV错误:断言失败(dims <= 2 && data &&(unsigned)i0 <(无符号)si ze.p [0] &&(无符号)(i1 * DataType <_Tp> :: channels)<(unsigned)(size。 p(1)* channel s())&&((((sizeof(size_t)<< 28)| 0x8442211)>>((DataType <_Tp> :: depth)&((1 << 3) – 1)) * 4)&15)== elemSize1())在未知函数中,文件c:\ users \ tim \ document s \ code \ opencv \ build \ include \ opencv2 \ core \ mat.hpp,第537行
OpenCV的版本是2.4.6,可执行文件被dynamic链接到debugging库。
发生异常是因为您将图像定义为unsigned char数组,但在<>函数中使用了unsigned int。 在<>必须得到相同的类型,你的矩阵,即无符号字符。 否则它会抛出一个你看到的异常。
向cout函数提供unsigned char时,它假定您正在尝试打印一个不是数字的字符(char)。 如果你想看到它的数值将其转换为int:
cout <<(int)image.at <unsigned char>(1,1)<<“\ n”;