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

Posted 安岳第二帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

效果:

原图:

索贝尔算子: 

拉普拉斯算子:

坎尼算子:

以上是关于python坎尼算子索贝尔算子和拉普拉斯算子实现边缘检测的主要内容,如果未能解决你的问题,请参考以下文章

使用二阶微分锐化图像(拉普拉斯算子)基本原理及Python实现

Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊

opencv python:图像梯度

OpenCV之图像梯度 – 拉普拉斯算子(二阶导数算子)

OpenCV之图像梯度 – 拉普拉斯算子(二阶导数算子)

5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导 意境级讲解