C++ OpenCV-无法访问CV_8SC1的像素值iof
我有一个cv::Mat对象,它保存类型为C++ OpenCV-无法访问CV_8SC1的像素值iof,c++,opencv,C++,Opencv,我有一个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); int temp=layer
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);
int temp=layerMap.at(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
OpenCV错误:断言失败(dims您正在创建一个8位有符号元素的矩阵(CV\u 8SC1
)。要读取它们,请使用有符号字符访问:
schar temp = layerMap.at<schar>(canvasX, canvasY);
schar temp=layerMap.at(画布,画布);
你知道类型为CV_8SC1
和CV_32S
的矩阵之间的区别吗?是的,在阅读你的评论后意识到了这一点-CV_8SC1包含8位像素,应该使用at(x,y)
访问,而CV_32S包含32位大像素,应该使用at(x,y)访问
@KeillRandor发布一个答案,这样我就可以接受它。因为char是有符号的还是无符号的取决于平台,所以写schar temp=layerMap.at(canvax,canvasY);
?否则,当temp的行为不符合预期时,可能会有人感到惊讶。