Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV-无法访问CV_8SC1的像素值iof_C++_Opencv - Fatal编程技术网

C++ OpenCV-无法访问CV_8SC1的像素值iof

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::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=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的行为不符合预期时,可能会有人感到惊讶。