2

以下代码允许使用 OpenCV 中可用的 Sobel 算子计算图像的梯度。

IplImage* grad_x = cvCreateImage(cvGetSize(image),IPL_DEPTH_32F,1);
IplImage* grad_y = cvCreateImage(cvGetSize(image),IPL_DEPTH_32F,1);
cvSobel(image,grad_x,1,0,3);
cvSobel(image,grad_y,0,1,3);

该函数如何处理边缘cvSobel()?这个功能和有什么区别这个 这个?我阅读了有关可用borderType选项的信息,但是,我不知道哪些选项更适合使用。

此外,在计算图像的梯度之前执行平滑滤波器有什么好处?

最后,计算出一张图像的梯度后,如何计算对应的角度和大小?

4

1 回答 1

1

如果你对边缘图感兴趣,你应该考虑 OpenCV 中的Canny方法。Sobel将返回一个梯度图像,然后您可以使用threshold通过简单的阈值化从中派生边缘图,或者您可以执行更复杂的方法,例如该Canny方法。

平滑图像(例如,通过GaussianBlurblur)将降低操作导致的放大噪声水平Sobel

我在这里有一个非常相似的答案,它显示了如何确定梯度的幅度和相位。

希望有帮助!

于 2013-01-23T20:42:45.433 回答