您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python+OpenCV 图像边缘检测四种实现方法

51自学网 2022-02-21 10:47:14
  python
这篇教程Python+OpenCV 图像边缘检测四种实现方法写得很实用,希望能帮到您。
import cv2 as cvimport numpy as npimport 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.dllD:/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)

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.imshow(res,cmap=plt.cm.gray)plt.title("Sobel算子边缘检测")
Text(0.5, 1.0, 'Sobel算子边缘检测')

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(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("Schaar算子边缘检测")
Text(0.5, 1.0, 'Schaar算子边缘检测')

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算子边缘检测')

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

res = cv.Canny(horse,0,100)
# res = cv.convertScaleAbs(res) Canny边缘检测是一种二值检测,不需要转换格式这一个步骤
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图像边缘检测的资料请关注51zixue.net其它相关文章!


关于Flask 上下文详细介绍
Flask 数据库集成的介绍
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。