开发者

Python+OpenCV 图像边缘检测四种实现方法

目录
  • 1.Sobel算子
  • 2.Schaar算子(更能体现细节)
  • 3.Laplacian算子(基于零穿越的,二阶导数的0值点)
  • 4.Canny边缘检测(被认为是最优的边缘检测算法)
  • 总结
import cvwww.cppcns.com2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 设置兼容中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
  warnings.warn("loaded more than 1 DLL from .libs:\n%s" %
horse = cv.imread('img/horse.jpg',0)
plt.imshow(horse,cmap=plt.cm.gray)
plt.imshow(horse,cmap=plt.cm.gray)

Python+OpenCV 图像边缘检测四种实现方法

1.Sobel算子

# 1,0 代表沿x方向做sobel算子
x = cv.Sobel(horse,cv.CV_16S,1,0)
# 0,1 代表沿y方向做sobel算子
y = cv.Sobel(horse,cv.CV_16S,0,1)
# 格式转换
absx = cv.convertScaleAbs(x)
absy = cv.convertScaleAbs(y)
# 边缘检测结果
res = cv.addWeighted(absx,0.5,absy,0.5,0)
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原图")
plt.subplot(1,2,2)
m2 = plt.imsh编程客栈ow(res,cmap=plt.cm.gray)
plt.title("Sobel算子边缘检测")
Text(0.5, 1.0, 'Sobel算子边缘检测')

Python+OpenCV 图像边缘检测四种实现方法

2.Schaar算子(更能体现细节)

# 1,0 代表沿x方向做sobel算子
x = cv.Sobel(horse,cv.CV_16S,1,0,ksize=-1)
# 0,1 代表沿y方向做sobel算子
y = cv.Sobel(horse,cv.CV_16S,0,1,ksize=-1)
# 格式转换
absx = cv.convertScaleAbs(x)
absy = cv.convertScaleAbs(y)
# 边缘检测结果
res = cv.addWeighted(absx,0.5,absy,0.5,0)
plt.figure(figs编程客栈ize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原图")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Schaar算子边缘检测")
Text(0.5, 1.0, 'Schaar算子边缘检测')

Python+OpenCV 图像边缘检测四种实现方法

3.Laplacian算子(基于零穿越的,二阶导数的0值点)

res = cv.Laplacian(horse,cv.CV_16S)
res = cv.convertScaleAbs(res)
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原图")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Laplacian算子边缘检测")
Text(0.5, 1.0, 'Laplacian算子边缘检测')

Python+OpenCV 图像边缘检测四种实现方法

4.Canny边缘检测(被认为是最优的边缘检测算法)

Python+OpenCV 图像边缘检测四种实现方法

Python+OpenCV 图像边缘检测四种实现方法

Python+OpenCV 图像边缘检测四种实现方法

Python+OpenCV 图像边缘检测四种实现方法

res = cv.Canny(horse,0,100)
# res = cv.convertScaleAbs(res) Canny边缘检测是一种二值检测http://www.cppcns.com,不需要转换格式这一个步骤
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原图")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Canny边缘检测")
Text(0.5编程客栈, 1.0, 'Canny边缘检测')

Python+OpenCV 图像边缘检测四种实现方法

总结

Python+OpenCV 图像边缘检测四种实现方法

Python+OpenCV 图像边缘检测四种实现方法

以上就是python+OpenCV 图像边缘检测四种实现方法的详细内容,更多关于Python OpenCV图像边缘检测的资料请关注我们其它相关文章!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜