目录:

(一)轮廓发现的介绍

(二)代码实现

(1)使用直接使用阈值方法threshold方法获取二值化图像来选择轮廓

(2)使用canny边缘检测获取二值化图像

(一)轮廓发现的介绍与API的介绍

操作步骤:

1.转换图像为二值化图像:threshold方法或者canny边缘提取获取的都是二值化图像
2.通过二值化图像寻找轮廓:findContours
3.描绘轮廓:drawContours

(二)代码实现

(1)使用直接使用阈值方法threshold方法获取二值化图像来选择轮廓

 1 def contours_demo(image):
2 dst = cv.GaussianBlur(image,(9,9),15)  #高斯模糊,消除噪声
3 gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY) #先变灰度图像
4 ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) #获取二值图像
5 cv.imshow("binary image",binary)
6
7 # cloneImage,contours,heriachy = cv.findContours(binary,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE) #RETR_TREE包含检测内部
8 cloneImage,contours,heriachy = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE) #RETR_EXTERNAL检测外部轮廓
9 for i, contour in enumerate(contours):
10 # cv.drawContours(image,contours,i,(0,0,255),2)  #绘制轮廓
11 cv.drawContours(image,contours,i,(0,0,255),-1)  #填充轮廓
12 print(i)
13 cv.imshow("detect contours",image)
14
15
16 src = cv.imread("./lk.png") #读取图片
17 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
18 cv.imshow("input image",src) #通过名字将图像和窗口联系
19
20 contours_demo(src)
21
22 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
23 cv.destroyAllWindows() #销毁所有窗口

(2)使用canny边缘检测获取二值化图像

 1 def contours_demo(image):
2 binary = edge_demo(image)
3
4 cloneImage,contours,heriachy = cv.findContours(binary,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE) #RETR_TREE包含检测内部
5 for i, contour in enumerate(contours):
6 # cv.drawContours(image,contours,i,(0,0,255),2)
7 cv.drawContours(image,contours,i,(0,0,255),-1)
8 print(i)
9 cv.imshow("detect contours",image)
10
11 def edge_demo(image):
12 dst = cv.GaussianBlur(image,(3,3),0)
13 gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY) #先变灰度图像
14
15 edge_output = cv.Canny(gray,50,108)
16
17 cv.imshow("detect contours",edge_output)
18 return edge_output
19
20 src = cv.imread("./lk.png") #读取图片
21 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
22 cv.imshow("input image",src) #通过名字将图像和窗口联系
23
24 contours_demo(src)
25
26 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
27 cv.destroyAllWindows() #销毁所有窗口

参考:

https://www.cnblogs.com/ssyfj/p/9276443.html

python实现轮廓发现的更多相关文章

  1. opencv python:轮廓发现

    example import cv2 as cv import numpy as np def edge_demo(image): blurred = cv.GaussianBlur(image, ( ...

  2. 【python+opencv】轮廓发现

    python+opencv---轮廓发现 轮廓发现---是基于图像边缘提取的基础寻找对象轮廓的方法, 所有边缘提取的阈值选定会影响最终轮廓发现的结果. 介绍两种API使用: -cv.findConto ...

  3. Python+OpenCV图像处理(十六)—— 轮廓发现

    简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 代码如下: import cv2 as cv import numpy as np def c ...

  4. opencv::轮廓发现(find contour in your image)

    轮廓发现(find contour) 轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法. 所以边缘提取的阈值选定会影响最终轮廓发现结果 //发现轮廓 cv::findContours( InputO ...

  5. Pytest权威教程-更改标准(Python)测试发现

    目录 更改标准(Python)测试发现 在测试收集过程中忽略路径 测试期间收集的测试取消 保留从命令行指定的重复路径 更改目录递归 更改命名约定 将cmdline参数解释为Python包 找出收集的东 ...

  6. opencv——轮廓发现与轮廓(二值图像)分析

    引言 二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息. 这里顺带提下边缘检测,和轮廓提取的区别: 边缘检测 ...

  7. 15、OpenCV Python 轮廓发现

    __author__ = "WSX" import cv2 as cv import numpy as np # 基于拓扑结构来发现和绘制(边缘提取) # cv.findConto ...

  8. 用python实现新词发现程序——基于凝固度和自由度

    互联网时代,信息产生的数量和传递的速度非常快,语言文字也不断变化更新,新词层出不穷.一个好的新词发现程序对做NLP(自然预言处理)来说是非常重要的. N-Gram加词频 最原始的新词算法莫过于n-gr ...

  9. python opencv3 轮廓检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy as np # 创建一个2 ...

随机推荐

  1. [Linux]Ansible自动化运维② - 工具与模块

    目录 一.Ansible的工具 1.1 Ansible的工作前提 1.2 Ansible的安装文件 1.3 Ansible的配置文件 1.4 Ansible的相关工具 1.4.1 [帮助工具]Ansi ...

  2. 官宣!ElasticJob 3.0.0 版本正式发布

    ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成.它通过弹性调度.资源管控.以及 ...

  3. 通过ideviceinstaller获取IOS APP bundleId

    查看ios设备udid: idevice_id -l 查看ios应用的bundleId: # 安装ideviceinstaller brew install ideviceinstaller # 查看 ...

  4. Windows用cmd编译运行Java程序

    https://www.runoob.com/w3cnote/windows10-java-setup.html

  5. VMware Tanzu社区版初体验

    VMware Tanzu社区版 VMware Tanzu Community Edition 是一个功能齐全.易于管理的 Kubernetes 平台,供学习者和用户使用. 它是一个免费的.社区支持的. ...

  6. Redis 高阶数据类型重温

    今天这个专题接着上一篇 Redis 的基本数据类型 继续讲解剩下的高阶数据类型:BitMap.HyperLogLog 和 GEO hash.这些数据结构的底层也都是基于我们前面说的 5 种 基本类型, ...

  7. 用css写三角形

    html部分 <div class="triangle></div> css部分 .triangle{ width:0; height:0; overflow:hid ...

  8. 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换

    基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...

  9. JDBC:(java database Connection) java数据库连接。

    JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC连接步骤: 1.先导入jar包,把jar放入到工程下并 ...

  10. Windows10使用技巧

    Windows10配置技巧 新机配置 "我的电脑"图标设置 在桌面右击鼠标=>个性化=>点击左侧"主题"=>点击相关的设置中的"桌面 ...