以下代码允许使用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()
函数如何处理边缘?这个函数和 this one this one有什么区别?我阅读了有关borderType
个选项的信息,但是,我不知道哪个选项会更好用。
此外,在计算图像的梯度之前,有哪些优点可以提供平滑滤波器?
最后,在计算出图像的梯度后,如何计算相应的角度和幅度?
答案 0 :(得分:1)
如果您对边缘地图感兴趣,则应考虑OpenCV中的Canny方法。 Sobel
会返回一个渐变图像,然后您可以使用threshold从简单的阈值处理中获取边缘图,或者您可以执行更复杂的操作,如Canny
方法。
平滑图像(例如,通过GaussianBlur或blur)将降低Sobel
操作产生的放大噪音水平。
我有一个非常相似的答案位于here,它显示了如何确定渐变的幅度和相位。
希望有所帮助!