对于我使用允许类型的任何Mat类型,当我尝试做一些赋值或写入流等时,我得到如下的错误。它发生在MSVC ++ 2010 express编译器上,gnu g ++编译器不会发生这种情况
示例有缺陷的用法:
Mat M = Mat::zeros( image.size(), DataType<int>::type );
std::cout << M.at<int>( 0,0 ) << std::endl; // error
// OR
int x = M.at<int>( 0,0 ); // error
两个错误一起发生:
弹出窗口中的
Unhandled exception at <some hex adress> in test.exe:Microsoft C++ exception: cv:xception at memory location <some hex adress>
并在控制台窗口
OpenCV Error: Assertion failed ... \mat.hpp, line 537
有什么建议吗?
答案 0 :(得分:7)
制作矩阵数据类型CV_16U
。
.at
访问器功能非常细致,需要非常精确的数据类型。有些编译器会忽略这些问题,而其他编译器则会提前发现。
matrix.at<int>(row, col)
不是使用CV_16U
引用元素,而是引用unsigned short
数据类型。因此,可以使用matrix.at<unsigned short>(row, col)
访问元素。
答案 1 :(得分:0)
我不认为openCV有一个int数据类型的图像 整数类型通常是CV_16s,即16位短,所以使用