基于Sobel算子的图像边缘检测

一、Sobel算子

       Sobel边缘检测算法比较简单,实际应用中效率比canny边缘检测效率要高,但是边缘不如Canny检测的准确,然而在很多实际应用的场合,sobel边缘却是首选,Sobel算子是高斯平滑与微分操作的结合体,所以其抗噪声能力很强,用途较多。尤其是在对效率要求较高,而对细纹理不太关系的时候。
       使用Sobel算子提取图像边缘分3个步骤:

  1. 提取X方向的边缘,X方向一阶Sobel边缘检测算法为:
    [ − 1 0 1 − 2 0 2 − 1 0 1 ] \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1\end{bmatrix} \quad 121000121
  2. 提取Y方向的边缘,Y方向一阶Sobel边缘检测算法为:
    [ − 1 − 2 − 1 0 0 0 1 2 1 ] \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1\end{bmatrix} \quad 101202101
  3. 综合两个方向的边缘信息得到整幅图像的边缘。

二、Python代码实现

import cv2
import os
def SobelSeg(image):
    img = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
    cv2.namedWindow('W3',cv2.WINDOW_NORMAL)
    cv2.imshow("W3", img)
    cv2.waitKey(delay=0)
    return img

def convert(input_dir, output_dir):
    for image_name in os.listdir(input_dir):
        path = input_dir + "/" + image_name
        image = cv2.imread(path)
        image_1 = SobelSeg(image)
        cv2.imwrite(output_dir + "/" + "0" + image_name , image_1)

if __name__ == '__main__':
    input_dir = r"C:\Users\22476\Desktop\Graduation Project\Edge_test_image\original"
    output_dir = r"C:\Users\22476\Desktop\Graduation Project\Edge_test_image\result_32F"
    convert(input_dir, output_dir)

三、实现效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、参考文章

OpenCV——Sobel边缘检测

python+OpenCV图像处理(八)边缘检测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值