[![这里是图像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图像而不是副本吗?

10-04 17:46