Error: Assertion failed (((0x28442211 >> ((traits::Depth<_Tp>::value) & ((1 << 3) - 1))*4) & 15) ==

完整报错: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(i, j)[k]; 

调试查看,发现报错:Mat没有对应的at(i, j)函数

解决:

(1)使用指针访问mat中的像素(在连续访问的场景适用):

for (int i = 0; i < img.rows; i++) {
		uchar* current_row = img.ptr(i); 
		for (int j = 0; j < img.cols; j++) {
			for (int k = 0; k < 3; k++) {//此处实现针对3通道的图像,对于单通道的灰度图像,k循环删去
				current_row++;
			}
		}
	}

(2)如上方法不可满足需求:

将Mat类型强制类型转换便可如下所示访问:

((Mat_)img)(j, i)[k]=12

你可能感兴趣的:(cv,opencv)