圆形检测

通过python做圆形检测,基本都是一个套路,利用霍夫检测的思路,借用cv包的HoughCircles进行检测,这里要注意该函数的参数,不同的参数应对不同的业务场景,参数说明如下表

我经常修改的参数为minDist,param2,minRadius,maxRadius。一定不要犯懒,都挨个去理解,去试。
贴上我的代码和业务数据:代码也是我在别的地方抄的,随便百度就能找到

import cv2img = cv2.imread('O:/work/circleimg/1009/yuan4.png')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)th2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, \cv2.THRESH_BINARY, 11, 2)ret, thresh1 = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)canny = cv2.Canny(thresh1, 40, 80)canny = cv2.blur(canny, (3, 3))# 霍夫变换圆检测
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 1000, param1=10, param2=35, minRadius=40, maxRadius=150)
# 输出检测到圆的个数
print(len(circles[0]))for circle in circles[0]:if (circle[2] >= 100):continuex = int(circle[0])y = int(circle[1])r = int(circle[2])img = cv2.circle(img, (x, y), r, (0, 0, 255), -1)
cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

闭合轮廓检测

因为业务场景要求不一定是圆形可以当作圆,闭合的曲线也可以作为圆,所以就探索了新的思路。这里我贴一个链接,应该能给你一些启发思路
我的思路来源于对cv.findContours函数的参数和返回值的发现。

  1. 该函数的第个参数(轮廓的检索方式)可选很多,参数说明,因为考虑到实际的场景,封闭的圆一定在轮廓上存在层级关系的,所以我这里选择了cv.RETR_TREE,这样该函数的第二个返回值hierarchy就会保存层级关系,层级关系解释
  2. 通过层级关系以及轮廓数量,就可以筛选掉很多图片了,但是也有特例,就是数字6和9通过图片可以看到,这两张图片和封闭的轮廓一毛一样,而且层级关系也是相同的,于是通过第三参数(轮廓的近似办法)cv.CHAIN_APPROX_SIMPLE,参数说明和cv.findContours函数的第一个返回值进行判断。我判断的依据是:如果是曲线是闭合轮廓且没有其他的分支(反例,6和9),那么拟合该曲线的内外轮廓的坐标数差值相比于其他的曲线是更小的。经过实际证明确实是这样,不同的业务有不同的思路。上代码:
import cv2 as cv
import os
import numpy as np
# 定义圆形轮廓层级结构
x = [[[-1, -1, 1,-1], [-1, -1, 2,0], [-1, -1, -1,1]]]
x = np.array(x)
def circle(j):src = cv.imread('O:/work/circleimg/1009/'+str(j))gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)_, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)contours, hierarchy = cv.findContours(gray, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)# 轮廓数量为3 且符合x标准print(j)if len(contours)==3 and (hierarchy == x).all():if abs(len(contours[1])-len(contours[2]))<40:print("有缘")else:print("无缘")else:print("无缘")cv.drawContours(src,contours,-1,(0,0,255),2)cv.imshow("edged", src)cv.waitKey(0)cv.destroyAllWindows()for i in os.listdir('O:/work/circleimg/1009/'):circle(i)

简要说明:

  • 变量x是我的数据图像取得固定圆形封闭轮廓层级关系,你的可能有所不同需要调试一番
  • 图像预处理也需要注意,如果有需要可进行7x7的中值滤波
#最后欢迎邮箱讨论:zhangmaoker@163.com

python-圆形检测-封闭轮廓检测相关推荐

  1. python颜色识别原理_python+opencv实现颜色检测、轮廓检测、颜色追踪

    准备工作 python配置numpy和openCv库 读取图像和视频图像cv2.imread(路径) cv2.imshow(窗口名称,输出对象) cv2.waitkey(等待时间)import cv2 ...

  2. python实现颜色检测、轮廓检测、颜色追踪

    python-Opencv学习 准备工作 读取图像和视频 基础功能 裁剪图像 绘制图形和文本 视角转换 图像拼接 颜色检测 轮廓检测 颜色追踪 准备工作 python配置numpy和openCv库 读 ...

  3. python opencv轮廓检测_OpenCV 轮廓检测的实现方法

    轮廓概述 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理或 ...

  4. 轮廓检测_轮廓检测| Richer Convolutional Features | CVPR | 2017

    0 概述 论文名称:"Richer Convolutional Features for Edge Detection" 论文链接:https://openaccess.thecv ...

  5. java opencv 轮廓检测,OpenCV 轮廓检测 - 雷霄骅(leixiaohua1020)的个人页面 - OSCHINA - 中文开源技术交流社区...

    使用OpenCV可以对图像的轮廓进行检测.这是之前用过的代码,挺简单的,回顾一下.主要要进行以下2步操作: 1.cvThreshold():对图像进行二值化处理 2.cvFindContours(): ...

  6. ios 地图 省市轮廓_iOS 14中的新增功能:视觉轮廓检测

    ios 地图 省市轮廓 WWDC20 (WWDC20) Apple's WWDC 2020 (digital-only) event kickstarted with a bang. There we ...

  7. 图像处理基础操作二(边缘检测、轮廓检测、光流估计)

    目录 一.边缘检测 二.图像金字塔 三.图像轮廓检测 1.绘制图像轮廓 2.轮廓近似绘制 3.画轮廓边界矩形框 4.画轮廓外接圆 四.背景建模 五.光流估计 一.边缘检测 边缘检测通常是在保留原有图像 ...

  8. 【OpenCV入门指南】第五篇 轮廓检测 上

    <[OpenCV入门指南]第三篇Canny边缘检测>中介绍了边缘检测,本篇介绍轮廓检测,轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 在 ...

  9. OpenG 轮廓检测

    OpenGL轮廓检测 OpenGL轮廓检测简介 源代码剖析 主要源代码 OpenGL轮廓检测简介 今天,我们将讨论如何找到对象的轮廓.明确地说,我说的是3D对象的轮廓,是当光线沿任意方向入射时获得的轮 ...

最新文章

  1. C++随笔(2007-07-09)
  2. 写出最感兴趣的软件测试工作,你还不会写测试用例?!注意这五点,写出模板级的测试用例!...
  3. 数据中心告别柴发还需要多久?
  4. java如何计算时间天数差,java计算两个时间相差天数的方法汇总
  5. Nagios使用check_mysql_health插件监控Mysql主机
  6. 【Java】探究Java实现多接口时同名方法冲突问题
  7. 怎么结束linux里的redis进程,linux 怎么结束redis的monitor命令
  8. Qt5学习笔记之bin文件合成工具一:使用对话框选取本地文件并读取
  9. 查看Oracle数据库的用户名和密码
  10. Swift 5 闭包Closure简明教程
  11. mysql数据库内连接和外连接的区别
  12. 什么是客户旅程分析(customer journey mapping)
  13. 【Python实用工具】暴力破解-2!Python编写八位数密码本
  14. KEIL5报错error: #67: expected a “}“
  15. 从零开始的ZYNQ学习(基于矿卡EBAZ4205)(一)
  16. 三、项目分工(华为项目管理法-孙科炎读书摘要)
  17. 小红伞AntiVir专区
  18. U盘或移动硬盘无法弹出的解决方法
  19. python学习第五天作业
  20. 卫生纸玫瑰花折法5步_餐巾纸折纸玫瑰花的折法图解教程

热门文章

  1. android 小米sdk版本,小米应用商店:检查更新SDK 集成指南
  2. 软件工程学科思维导图
  3. css一些美化页面的方法
  4. 夫琅禾费matlab方孔圆孔,圆孔圆环夫琅禾费衍射实验的Matlab仿真设计.pdf
  5. 农商行信息化建设过程中存在哪些问题?
  6. 协议系列之TCP/IP协议
  7. Microsoft Office 2010信息
  8. 你会使用计算机哪些软件,Windows 系统中有哪些软件可以被你评为「必装」?
  9. 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...
  10. 上位机和下位机的区别