[![这里是图像skelt.tif(img)] [1]] [1]我正在尝试访问Mat元素angl(坡度角)。但是,当我使用.at语句时,它将引发错误。
我已经检查了NULL图片(angl.data == NULL)。这不是NULL镜像。
这是代码:
Mat img = imread("skelt.tif"); // this is a binary image
Mat grad_x(img.rows, img.cols, CV_16U);
Mat grad_y(img.rows, img.cols, CV_16U);
Mat angl;
Sobel(img, grad_x, CV_32F, 1, 0, 3);// Gradient X
Sobel(img,grad_y, CV_32F, 0, 1, 3); // Gradient Y
phase(grad_x, grad_y, angl,true);
cout << angl.at<float>(51, 5) << endl; // the dimensions are randomly chosen and are within the image
cout<<angl.ptr(5)[4];
错误发生在使用.at运算符的地方。错误是-
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)pt.y < (unsigned)
size.p[0] && (unsigned)(pt.x * 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:\opencv\build\in
clude\opencv2/core/mat.inl.hpp, line 912
我无法调试此错误。
最佳答案
图片angl
不是您认为的大小或类型,或者为空。
尝试使用angl.type()
检查类型,并使用angl.rows angl.cols
检查大小
如果有问题,可能是在我们没有的phase()调用中,您确定要修改angl图像而不是副本吗?