python坎尼算子、索贝尔算子和拉普拉斯算子实现边缘检测

        在对图像进行边缘检测时,常常使用各种算子完成,下面给出几种常见的算子,坎尼算子、索贝尔算子和拉普拉斯算子的代码。

# -*- coding: utf-8 -*-
"""
Created on Mon Jan 10 13:58:57 2022
@author: 2540817538(有问题请联系此QQ)
python 3.8.8
"""
import cv2

img_0 = cv2.imread('C:/Users/25408/Desktop/p1.jpg',1)
img = cv2.cvtColor(img_0,cv2.COLOR_BGR2GRAY)
cv2.namedWindow('gray', 0)#加入该语句可以拖动窗口大小
cv2.imshow('gray',img)
cv2.waitKey()

#sobel算子
x = cv2.Sobel(img,cv2.CV_16S,1,0)
#即Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,
y = cv2.Sobel(img,cv2.CV_16S,0,1)
#即8位无符号数,所以Sobel建立的图像位数不够,会有截断。
#因此要使用16位有符号的数据类型,即cv2.CV_16S。
X = cv2.convertScaleAbs(x)   # 转回uint8
Y = cv2.convertScaleAbs(y)
soble = cv2.addWeighted(X,0.5,Y,0.5,0)
cv2.namedWindow("soble", 0) 
cv2.imshow("soble",soble)
cv2.waitKey(0)
cv2.destroyAllWindows() 

#拉普拉斯算子
gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize = 3)
laplacian = cv2.convertScaleAbs(gray_lap)
cv2.namedWindow('laplacian', 0)
cv2.imshow('laplacian',laplacian)
cv2.waitKey(0)
cv2.destroyAllWindows()

#canny算子
img_gs = cv2.GaussianBlur(img,(3,3),0) #用高斯平滑处理原图像降噪。
canny = cv2.Canny(img_gs, 50, 150) #最大最小阈值
cv2.namedWindow('Canny', 0)
cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:

原图:

索贝尔算子: 

拉普拉斯算子:

坎尼算子:

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值