我有一个cv::Mat对象,它持有CV_8SC1类型的数据,因为我也需要存储负值。

cv::Mat layerMap;
layerMap = Mat(widgetSize.width(), widgetSize.height(), CV_8SC1);
layerMap = cv::Scalar::all(-1);

现在,我想访问特定行和列的值,因此我将其编写为-
int temp = layerMap.at<int>(canvasX, canvasY);

但这引出了一个断言-
OpenCV Error: Assertion failed (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()) in cv::Mat::at

正如在调试器中看到的那样,canvasX和canvasY都在layerMap的大小范围内。我以前使用相同的at<int>(x,y)方法访问cv_32S图像中的数据。

最佳答案

您正在创建一个8位带符号元素的矩阵(CV_8SC1)。为了阅读它们,请使用signed char访问:

schar temp = layerMap.at<schar>(canvasX, canvasY);

09-05 18:18