我有以下简单的代码崩溃,我不清楚为什么这不起作用.
cv::Mat *test_bug = new cv::Mat(img->rows, img->cols, CV_32F);
test_bug->at<unsigned char>(0,0) = 4;
Run Code Online (Sandbox Code Playgroud)
test_bug最终成为207乘207矩阵.所以我知道数组索引是有效的.这是复制/粘贴错误.
OpenCV错误:断言失败(dims <= 2 && data &&(unsigned)i0 <(unsigned)size.p [0] &&(unsigned)(i1*DataType <_Tp> :: channels)<(unsigned)(size.p [1]*channels())&&((((sizeof(size_t)<< 28)| 0x8442211)
((DataType <_Tp> :: depth)&((1 << 3) - 1))*4)&15)== elemSize1())在未知函数中,文件C:\ opencv231\build\include\opencv2/core/mat.hpp,第552行
cv::Mat *test_bug = new cv::Mat(img->rows, img->cols, CV_32F);
Run Code Online (Sandbox Code Playgroud)
注意CV_32F; 这是一个浮点矩阵.
test_bug->at<unsigned char>(0,0) = 4;
Run Code Online (Sandbox Code Playgroud)
注unsigned char(或uchar); 现在你将它视为无符号的char矩阵(CV_8U).
因此,如果您的矩阵应该是浮点数,则需要访问以下元素:
test_bug->at<float>(0,0) = 4;
Run Code Online (Sandbox Code Playgroud)
或者,如果您想声明一个uchar矩阵:
cv::Mat *test_bug = new cv::Mat(img->rows, img->cols, CV_8U);
Run Code Online (Sandbox Code Playgroud)