栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

OpenCV关于图片语法(边缘检测)小结③

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OpenCV关于图片语法(边缘检测)小结③

慢慢学着学着发现opencv语法太丰富了 附opencv官方英文文档

1.cv2.GaussianBlur

C

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY 0, int borderType BORDER_DEFAULT )

Python:

cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst

参数解释
*src—输入图像 图像可以具有任意数量的通道 这些通道可以独立处理 但深度应为CV_8U CV_16U CV_16S CV_32F或CV_64F。
*dst—输出图像的大小和类型与src相同。
*ksize—高斯内核大小。 ksize.width和ksize.height可以不同 但​​它们都必须为正数和奇数 也
可以为零 然后根据sigma计算得出。
*sigmaX— X方向上的高斯核标准偏差。
*sigmaY— Y方向上的高斯核标准偏差。如果sigmaY为零 则将其设置为等于sigmaX 如果两个sigmas为零 则分别从ksize.width和ksize.height计算得出 为了完全控制结果 而不管将来可能对所有这些语义进行的修改 建议指定所有ksize sigmaX和sigmaY。
*borderType—像素外推方法
例如

imgBlur cv2.GaussianBlur(imgGray,(5,5),1)#(5, 5)表示高斯矩阵的长与宽都是5 标准差取1

滤波(blur)操作是一种基于邻域的图像平滑方法详细看下面这位的解释:高斯

2.cv2.Canny()
cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 

参数解释
① image 要检测的图像
② threshold1 阈值1 最小值
③ threshold2 阈值2 最大值 使用此参数进行明显的边缘检测
④ edges 图像边缘信息
⑤ apertureSize sobel算子 卷积核 大小
⑥ L2gradient 布尔值。
⑦ True 使用更精确的L2范数进行计算 即两个方向的导数的平方和再开方
⑧ False 使用L1范数 直接将两个方向导数的绝对值相加
作用略述
阈值2进行明显的边缘检测 阈值1进行连接
卷积核越大 细节越多
flase细节明显

3.cv2.erode
cv2.erode(src, kernel, dst None, anchor None, iterations None, borderType None, borderValue None)

参数解释
① src:输入图像.通道的数量可以是任意的 但深度应该是CV_8U、CV_16U、CV_16S、CV_32F 或 CV_64F。
② kernel:用于腐蚀的内核结构元素。一般为奇数(3,3)、(5,5)的卷积核等等
③ dst:输出与 src 大小和类型相同的图像
④ anchor:元素内锚点的锚点位置 默认值 (-1, -1) 表示锚点位于元素中心。
⑤ iterations:迭代应用侵蚀的次数
⑥ borderType:像素外推方法
⑦ borderValue:边界的值为恒定的值
作用略述
取最小值的像素邻域的形状

4.cv2.dilate
cv2.dilate(src, kernel, dst None, anchor None, iterations None, borderType None, borderValue None)

参数解释
① anchor:元素内锚点的锚点位置 默认值 (-1, -1) 表示锚点位于元素中心。
② iterations:迭代应用膨胀的次数
作用略述
取最大值的像素邻域的形状

5.cv2.findContours
findContours(image, mode, method, contours None, hierarchy None, offset None): 

参数解释
① mode:
cv2.RETR_EXTERNAL 只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系 都是同级
cv2.RETR_CCOMP 建立两个等级的轮廓 上面一层为外边界 里面一层为内孔的边界信息
cv2.RETR_TREE 建立一个等级树结构的轮廓
② method:
cv2.CHAIN_APPROX_NONE 存储所有边界点
cv2.CHAIN_APPROX_SIMPLE 压缩垂直、水平、对角方向 只保留端点
cv2.CHAIN_APPROX_TX89_L1 使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS 使用teh-Chini近似算法
作用略述
返回一个list list中每个元素都是图像中的一个轮廓 用numpy中的ndarray表示。
这个没有理解很深 后续找找有没有实战的例子。

6.cv2.drawContours
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]]) 

参数解释
① image 要检测的图像。
② contours 所有输入轮廓。每个轮廓都存储为点向量。
③ contourIdx 参数表示要绘制的轮廓。如果是负数 则绘制所有轮廓。
④ color 轮廓的颜色。
⑤ thickness 轮廓绘制的线条厚度。如果它是负的 例如thickness CV_FILLED 轮廓内饰被绘制。
⑥ lineType 线路连接。。
⑦ hierarchy 有关层次结构的可选信息。它只需要 如果你想画一些轮廓 maxlevel 。
⑧ maxlevel 绘制轮廓的最大水平 。如果是 0 则只绘制指定的轮廓。如果是 1 则函数绘制轮廓和所有嵌套轮廓。如果是 2 则函数绘制轮廓、所有嵌套轮廓、所有嵌套到嵌套轮廓等。此参数仅在可用的层次结构(hierarchy)时考虑。
⑨ offset 可选轮廓移位参数。将所有绘制的轮廓按指定的轮廓移动。
⑩ contour指向第一个轮廓的指点。
① externalColor 外部轮廓的颜色。
② holeColor 内部轮廓的颜色 孔 。
作用略述
画图象 关于嵌套说明 以后再说。

其实这就是canny算法边缘检测的整体思路

转换成灰度图
高斯模糊 去除噪点
max 和 min 限制边缘
可以在后面加上膨胀 腐蚀

图片

代码

mport cv2
import numpy as np
webcam False
path 5.png 
img cv2.imread(path)
imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur cv2.GaussianBlur(imgGray, (5, 5), 1) # (5, 5)表示高斯矩阵的长与宽都是5 标准差取0
imgCanny cv2.Canny(imgBlur, 100,100,apertureSize 3)
kernel np.ones((5, 5)) # 做一个矩阵 作为膨胀腐蚀的内核
imgDial cv2.dilate(imgCanny, kernel, iterations 3) # 膨胀
imgThre cv2.erode(imgDial, kernel, iterations 2) # 腐蚀
cv2.imshow( Canny , imgThre)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266641.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号