我有一个保存CV_8SC1
类型数据的cv :: Mat对象,因为我还需要存储负值。
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图像中的数据。
答案 0 :(得分:2)
您正在创建一个包含8位有符号元素的矩阵(CV_8SC1
)。要阅读它们,请使用signed char
访问权限:
schar temp = layerMap.at<schar>(canvasX, canvasY);