opencv识别圆形

opencv有内置函数可以识别物体形状,仅仅需要几行代码就能实现圆形实时检测

用opencv抓取摄像头图像

import cv2  # 载入opencv库
cap = cv2.VideoCapture(0)  # 此处cap即摄像头变量;内置摄像头为0,若有其他摄像头则依次为1,2,3,4,…
print(cap.isOpened())  # 检查摄像头是否处于打开状态,返回布尔值
cap.set(3, 640)
cap.set(4, 480)  # 设置摄像头拍摄的图像像素
while Ture:  # 写成死循环,使一直抓取摄像头图像ret, img = cap.read()  # 布尔变量,图像变量 = 摄像头变量.read();布尔变量为True,代表读取成功,False代表读取失败;读取的图像存储在img变量中cap.release()  # 关闭摄像头if cv2.waitKey(25) & 0xFF == ord('q'):break

用HoughCircles(霍夫圆)检测圆形

OpenCV使用了霍夫梯度法这个巧妙的方法,来使用边界的梯度信息,从而提升计算的效率。

cv2中进行霍夫圆环检测的函数:
cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
其中:
image:8位,单通道图像。如果使用彩色图像,需要先转换为灰度图像。
method:定义检测图像中圆的方法。目前唯一实现的方法是cv2.HOUGH_GRADIENT。
dp:累加器分辨率与图像分辨率的反比。dp获取越大,累加器数组越小。
minDist:检测到的圆的中心,(x,y)坐标之间的最小距离。如果minDist太小,则可能导致检测到多个相邻的圆。如果minDist太大,则可能导致很多圆检测不到。
param1:用于处理边缘检测的梯度值方法。
param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,检测到的圈子越多。
minRadius:半径的最小大小(以像素为单位)。
maxRadius:半径的最大大小(以像素为单位)。

import mtplotlib.pyplot as plt
gray = cv2.cvtColor(img, icv2.COLOR_BGR2GRAY)  # 灰度图像;opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等;
circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 150, param1=100, param2=60, minRadius=50, maxRadius=20000)
circles = circles1[0, :, :]  # 提取为二维
circles = np.uint16(np.around(circles))  # 四舍五入,取整
for i in circles[:]:cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 5)  # 画圆cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 10)  # 画圆心print('圆心坐标:\t', i[0], i[1])
plt.imshow(img)
plt.show()

完整代码

import cv2  # 载入opencv库
import mtplotlib.pyplot as plt
cap = cv2.VideoCapture(0)  # 此处cap即摄像头变量;内置摄像头为0,若有其他摄像头则依次为1,2,3,4,…
print(cap.isOpened())  # 检查摄像头是否处于打开状态,返回布尔值
cap.set(3, 640)
cap.set(4, 480)  # 设置摄像头拍摄的图像像素
while Ture:  # 写成死循环,使一直抓取摄像头图像ret, img = cap.read()  # 布尔变量,图像变量 = 摄像头变量.read();布尔变量为True,代表读取成功,False代表读取失败;读取的图像存储在img变量中gray = cv2.cvtColor(img, icv2.COLOR_BGR2GRAY)  # 灰度图像;opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成mask图等;circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 150, param1=100, param2=60, minRadius=50, maxRadius=20000)circles = circles1[0, :, :]  # 提取为二维circles = np.uint16(np.around(circles))  # 四舍五入,取整for i in circles[:]:cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 5)  # 画圆cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 10)  # 画圆心print('圆心坐标:\t', i[0], i[1])plt.imshow(img)plt.show()# cap.release()  # 关闭摄像头if cv2.waitKey(25) & 0xFF == ord('q'):break

opencv边缘检测实时识别圆形相关推荐

  1. python摄像头识别二维码_python使用pyzbar+opencv实现实时识别二维码--李渣渣(lizaza.cn)...

    写东西就要写全面,前两天写了如何用python生成二维码,今天博主就给大家介绍一个识别二维码的方法. 1.安装本次开发所需要的库opencv 和pyzbar pip install pyzbar pi ...

  2. opencv+python+OpenPose姿态实时识别

    opencv+python+OpenPose 姿态实时识别 1.姿态识别 标记 颈.肩.肘.腕.腰.膝.踝 等特征点进行姿态识别,这些关节都有一定程度的自由度. 2.OPenPose OpenPose ...

  3. Python OpenCv 车牌检测识别(边缘检测、HSV色彩空间判断)

    Python OpenCv 车牌检测识别 背景 车牌识别在交通.停车等方面有着广泛应用,在网上也有很多种基于OpenCV方案进行识别,本文是综合了两种比较流行的方案,首先是提取出疑似车牌区域的轮廓,然 ...

  4. C++ 纯 OpenCV 实现扑克牌实时识别

    C++ 纯 OpenCV 实现扑克牌实时识别 网上有很多用OpenCV或其他工具实现扑克牌或者简单的数字识别demo,但都讲的不够简洁清晰或者提供的代码太混乱,所以我自己用OpenCV实现了一下这个d ...

  5. Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别

    搭建环境 opencv官网下载windows安装包 https://opencv.org/releases/ 选择最新版4.1.1 下载完成后是一个opencv-4.1.1-vc14_vc15.exe ...

  6. 利用opencv结合mfc实现识别圆形标记点并计算多个圆形标记点的三维坐标,拟合平面并计算法向量

    利用opencv结合mfc实现识别圆形标记点并计算多个圆形标记点的三维坐标,拟合平面并计算法向量 具体步骤 二.对应代码 1.引入库 2.标定 识别圆形标记点 左右图像中圆形标记点匹配 计算三维坐标 ...

  7. 数字图像处理二维码识别 python+opencv实现二维码实时识别

    数字图像处理二维码识别 python+opencv实现二维码实时识别 特点: (1)可以实现普通二维码,条形码: (2)解决了opencv输出中文乱码的问题 (3)增加网页自动跳转功能 (4)实现二维 ...

  8. 基于OpenCV实现人脸识别--Python

    目录 前言 第一章 OpenCV介绍 第二章 功能描述 2.1 对已有的数据进行检测 2.2 陌生人检测并发出警告 2.3 保存陌生人的视频 2.4 输入图片进行检测 2.5 现场录用信息 第三章 功 ...

  9. 基于OpenCV的实时车道线分割&车道保持系统(源码&教程)

    1.研究背景 汽车主动安全系统能够实现风险的主动预防和规避,其能有力缓解当前我国汽车交通事故频发的困境,故对其的相关研究得到了国家的大力支持. 车道保持辅助系统(LKAS,Lane Keeping A ...

最新文章

  1. iOS性能优化 - 网络图片加载优化
  2. Kail Linux渗透测试教程之免杀Payload生成工具Veil
  3. 好文推荐 | 分布式锁用Redis好,还是Zookeeper好?
  4. idea生成方法注释的正确方法
  5. setitimer用法说明
  6. 设置让终端保持utf8 cmd的设置
  7. [LeetCode]Power
  8. tinyhttpd源码分析
  9. 深入浅出 NXLog (一)
  10. 极点五笔状态栏菜单不显示,如何再让它显示?
  11. 基于MyEclipse+JSP+Mysql+Tomcat开发得塞北村镇旅游网站设计
  12. ValueError: Variable in_hidden/weights already exists, disallowed. Did you mean to set reuse=True or
  13. cesium分屏对比
  14. android自定义壁纸制作,Android 自定义View实现画背景和前景(ViewGroup篇)
  15. Hive案例 学生成绩表综合案例
  16. php jsapi支付没有走回调,微信支付成功没有执行回调路径
  17. 用纯javascript和html编写仿淘宝注册页面(带源码)
  18. Mindjet MindManager 2019使用教程:
  19. Multiple markers at this line - Missing semicolon
  20. 数学使用计算机辅助教学,计算机辅助小学数学教学的初探论文

热门文章

  1. java 二叉树的高度_吃透Java集合系列十二:TreeMap
  2. USB学习笔记(2)USB协议
  3. NBIOT专栏之BC28串口连接阿里云物联网平台接发数据
  4. 袁国宝:反垄断风暴之下,贝壳新掌门彭永东如何应对?
  5. 【跨域异常】Cross origin requests are only supported for protocol schemes: http, data, chrome,chrome-exten
  6. 门诊系统 java_基于B/S的JAVA门诊就诊系统
  7. css+js实现三维空间图片旋转,炫酷旋转
  8. Vue前后端分离的电商后台管理系统项目的概述
  9. 一周的第一天是星期日还是星期一?
  10. 华为android升级国内版,华为手机能不能升级新版安卓?官方给出答案,即将有大动作...