Sobel算法主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很好的消除噪声的影响。Sobel算子对于象素的位置的影响做了加权,与Prewitt算子、Roberts算子相比因此效果更好。
这次我们使用sobel算子边缘检测的方法来获取图像的边缘,任务图片如下:
首先使用imshow()读取图片:
接着使用Sobel()函数获取图片x,y轴上的边缘信息:
其中CV_16S是为防止系统进行sobel运算后出现负值或大于255的值导致图片出现截断现象,而将图像数据类型改为16位有符号的数据类型。convertScaleAbs()函数是将其转换回原来的8位无符号数的形式将图片输出。经过sobel处理后得到如下两张图:
x轴边缘
y轴边缘
接着使用addWeighted()函数将两张图组合起来,组合后的图片即是我们需要的图片边缘图像:
最后一步,将图像反相,得到清晰的图片边缘图像:
以上就是open CV使用Sobel算子边缘检测提取图片边缘的完整步骤。