OpenCV mat::在抛出异常时

OpenCV mat::at throwing exception

本文关键字:抛出异常 OpenCV mat      更新时间:2023-10-16

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

#include <opencv2opencv.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<=2&&amp;data&&amp;(无符号)i0<(无符号)size.p[0]&amp;(无符号)(i1*DataType<_Tp>::通道)<(unsigned)(size.p[1]*通道s())&amp;(((sizeof(size_t)<lt;28)|0x8442211)>>((数据类型<_Tp>::深度)&((1<<3)-1))*4)&15) ==elemSize1())在未知函数中,文件c: \users\tim\documents\code\opencv\build\include\opencv2\core\mat.hpp,第537行

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

  1. 发生异常是因为您将image定义为无符号char数组,但在<>内部使用了无符号int作用在<>必须获得和矩阵相同的类型,即无符号字符。否则,它会抛出一个异常。

  2. 当您向cout函数提供无符号字符时,它假设您试图打印的是字符(char)而不是数字。如果您想查看其数值,请将其转换为int:

    cout<lt;(int)image.at<无符号字符>(1,1)<lt;"\n";