访问 cv::Mat 数据的 OpenCV 错误

OpenCV error for accessing cv::Mat data

本文关键字:OpenCV 错误 Mat cv 访问 数据      更新时间:2023-10-16

对于我与允许类型一起使用的任何 Mat 类型,当我尝试执行某些分配或写入流等时,我会收到如下所示的错误。它发生在MSVC++ 2010快速编译器上,而不是在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

有什么建议吗?

使矩阵数据类型CV_16U

.at访问器函数非常细致,需要非常精确的数据类型。 一些编译器忽略了这些问题,而另一些编译器则很早就发现了这些问题。

CV_16U不是引用带有matrix.at<int>(row, col)元素,而是引用unsigned short数据类型。 因此,可以使用 matrix.at<unsigned short>(row, col) 访问这些元素。

我不相信openCV有一个int数据类型图像。
整数类型一般是CV_16s的,即16bit短,所以使用