完整报错:Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file E:\opencv4.x\opencv\newbuild\install\include\opencv2\core\mat.inl.hpp, line 900
场景:opencv c++使用如下代码访问mat中的元素:
theta = direction.at<Vec3b>(i, j)[k];
调试查看,发现报错:Mat没有对应的at<Vec3b>(i, j)函数
解决:
(1)使用指针访问mat中的像素(在连续访问的场景适用):
for (int i = 0; i < img.rows; i++) {
uchar* current_row = img.ptr<uchar>(i);
for (int j = 0; j < img.cols; j++) {
for (int k = 0; k < 3; k++) {//此处实现针对3通道的图像,对于单通道的灰度图像,k循环删去
current_row++;
}
}
}
(2)如上方法不可满足需求:
将Mat类型强制类型转换便可如下所示访问:
((Mat_<Vec3b>)img)(j, i)[k]=12