目录:

(一)轮廓发现的介绍

(二)代码实现

(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. cron表达式的双重人格:星期和数字到底如何对应?

    写在前面 cron在希腊语中是时间的意思,而cron表达式(cron expression)则是遵循特定规则,用于描述定时设置的字符串,常用于执行定时任务.本文总结了不同环境(如平台.库等)下,cro ...

  2. RAC使用auto rolling的方式打补丁

    11.2.0.4 RAC 某系统主库使用auto rolling的方式打补丁在一节点执行1-5,结束后然后在二节点执行1-5,结束后最后再在某个节点执行6. 1.backup GI_HOME& ...

  3. CentOS7安装Python3和VIM8

    参考:http://blog.sina.com.cn/s/blog_45249ad30102yulz.html

  4. Zookeeper 集群部署的那些事儿

    简介 额...., &*$% 淘气! ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务. ZooKeeper本质上是一个分布式的小文件存储系统 ...

  5. 鲲鹏展翅|SphereEx 获华为鲲鹏技术认证

    SphereEx Data Middleware 通过了华为鲲鹏技术认证并加入鲲鹏展翅伙伴计划,未来 SphereEx Data Middleware 产品将继续以分布式能力为基础,以数据安全.分布式 ...

  6. 利用PATH环境变量 - 提升linux权限~👻

    利用PATH提升linux权限 参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/ ...

  7. Java(36)IO流案例与总结

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228455.html 博客主页:https://www.cnblogs.com/testero ...

  8. 禅道开源版 Ldap认证插件开发

    禅道开源版-Ldap插件开发 背景 由于开源版无法使用ldap认证,所以在此分享一下自己开发禅道的ldap开发过程,希望对你有所帮助. 简单说一下这个插件的功能: 1.跳过原有禅道认证,使用ldap认 ...

  9. 重磅!微软发布 vscode.dev,把 VS Code 带入浏览器!

    早在 2019 年,当.dev顶级域名开放时,我们赶紧注册了vscode.dev.像许多购买.dev域名的人一样,我们不知道我们将用它做啥.反正,也占个坑吧! 将 VS Code 带入浏览器 直到今天 ...

  10. 热身训练1 Problem B. Harvest of Apples

    http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: 求 C(0,n)+C(1,n)+...+C(m,n) 分析: 这道题,我们令s(m,n) = C( ...