我在网上找到了使用以下代码的代码
cv::VideoCapture frame_capture;
...
cv::Mat frame;
frame_capture.read(frame);
...
std::vector<cv::Mat> bgr_planes;
split(frame, bgr_planes);
...
int curr_pixel = (bgr_planes[0].at<uchar>(row_index,col_index));
...
从Mat向量中获取值并将其赋值给变量
当我尝试按.at<uchar>
更改.at<int>
时,我发现此错误
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, file C:\Open_CV\opencv\build\include\opencv2/core/mat.hpp, line 537
我的问题是.at返回一个整数,为什么我们有.at<uchar>
答案 0 :(得分:2)
因为.at返回一个整数,为什么我们有.at?
你的前提是错的:
.at<type>
返回给定类型的变量。然后你可以转换为另一种类型,比如“int”。
这相当于:
uchar original_value = mat.at<uchar>(row, col);
int int_value = original_value;
错误意味着你超出了矩阵数据的范围,因为你正在索引一个uchar数组(1个字节),好像它是一个int数组(4个字节)