【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv

文章目录

  • 前言
  • 一、一阶导数算子:sobel算子
  • 二、二阶导数算子:拉普拉斯算子
  • 三.Canny算子


前言

参考视频:opencv教程(跟着视频敲了一遍代码)
参考教材:《数字图像处理基础》 作者:朱虹

一、一阶导数算子:sobel算子

在python里调用sobel算子的指令如下例子所示:

sobelx=cv2.Sobel(X1,cv2.CV_64F,1,0,ksize=3)

其中X1是导入的图像(一般为灰度图),ksize是sobel算子的大小.
1,0表示算的是水平的梯度;0,1则表示算的是垂直的梯度

完整例子:

import cv2
import numpy as np
X1=cv2.imread('dog.jpg',0)
sobelx=cv2.Sobel(X1,cv2.CV_64F,1,0,ksize=3)
sobely=cv2.Sobel(X1,cv2.CV_64F,0,1,ksize=3)
res=np.hstack((sobelx,sobely))
cv2.imshow('dog',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:
【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv_第1张图片
视频里还讲到一种水平操作和垂直操作互相叠加的用法:

import cv2

X1=cv2.imread('dog.jpg',0)
sobelx=cv2.Sobel(X1,cv2.CV_64F,1,0,ksize=3)
sobelx=cv2.convertScaleAbs(sobelx)
sobely=cv2.Sobel(X1,cv2.CV_64F,0,1,ksize=3)
sobely=cv2.convertScaleAbs(sobely)
sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)

cv2.imshow('dog',sobelxy)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv_第2张图片
如果直接把sobel=cv2.Sobel(X1,cv2.CV_64F,1,0,ksize=3)里面的dx,dy直接设为1,1呢:

import cv2

X1=cv2.imread('dog.jpg',0)
sobelxy=cv2.Sobel(X1,cv2.CV_64F,1,1,ksize=3)
sobelxy=cv2.convertScaleAbs(sobelxy)
cv2.imshow('dog',sobelxy)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv_第3张图片
效果可能不太好。
当然一阶算子还不止这一个

二、二阶导数算子:拉普拉斯算子

import cv2

X1=cv2.imread('dog.jpg',0)
laplacian=cv2.Laplacian(X1,cv2.CV_64F)
y=cv2.convertScaleAbs(laplacian)
cv2.imshow('dog',y)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv_第4张图片

当然二阶算子也还不止这一个

三.Canny算子

v1=cv2.Canny(X1,80,150)

其中X1为输入的图像(一般是灰度图像),后面两个参数是可以设定的双阈值(minval和maxval)。
前面那个参数(这里是80),如果图像中的梯度值小于80,就会被舍弃。后面那个参数(这里是150),如果图像中的梯度值大于150,就会保留,处理为边界。
minval和maxval设置的小,保留边界的条件越低,图像中边界越多

以下为一个实验的例子:

import cv2
import numpy as np
X1=cv2.imread('dog.jpg',0)
v1=cv2.Canny(X1,100,170)
v2=cv2.Canny(X1,80,150)
v3=cv2.Canny(X1,50,100)

res=np.hstack((v1,v2,v3))

cv2.imshow('1',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

【图像处理】图像的锐化操作 | 边缘检测sobel算子,拉普拉斯算子,Canny算子| opencv_第5张图片
可以看到从V1到V3,边界保留的条件越来越轻松,图像中的细节也越来越多。

你可能感兴趣的:(图像处理,opencv学习,opencv,图像处理,计算机视觉)