python下用OpenCV的圆形检测
一.简介:
初次使用python的你一定感受到了python的便捷。作为高级编程语言只需调用类库即可。
对于圆形物体识别问题,opencv提供了大量方法。
(代码文末附上)
二.检测步骤:
2.1读取图像
窗口1(初始图像未经过处理)

2.2降噪处理
由于图像中存在大量噪点(什么是噪点参考https://www.zhihu.com/question/23877970)
利用降噪方法cv2.blur(img, (5,5))
其中两个参数为横向纵向的模糊程度,数值越大越模糊
这是5,5的模糊程度

这是20,20的模糊程度

这里我们用5,5效果测试下来最佳
2.3灰度化
灰度化常用于色彩丰富的图像,类似ps中的失色操作。
方法:cv2.cvtColor(result,cv2.COLOR_BGR2GRAY)

由于原图像就是黑白主色调,所以去色改变不大
2.4霍夫变化圆检测
之前的降噪和灰度化都是为了这一步的检测
参考文章http://lib.csdn.net/article/opencv/24037
方法如下:
cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)
参数1 image:传递图像
参数2 method:默认,不用理解
参数3 dp:默认,不用理解
参数4 minDist:不同圆心的最小距离,单位为像素
参数5 涉及到Canny算法,这里的80为canny算法的上限,这里的canny算法下限自动设置为为上限一半,马上介绍canny算法
参数6 需要理解上面的参考文章,可以认为是需要达到的累加数量
参数7,8 为最小半径和最大半径,避免识别白色的圆圈

那么什么是canny算法呢?简单来说就是边缘检测算法
具体实现效果可以参考方法:cv2.Canny(img, 27, 54),显示效果为

加大参数边缘就越少,我们用到的就是这种效果,即设置上限为80
cv2.Canny(img, 40, 80)

最终
circles=cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)
会将所有识别的圆形参数(圆心位置,半径)保存到circles
可以认为是一个数组中
2.5标记
根据2.4获取的图像信息利用cv2.circle()方法进行圈画

大功告成,可以调整参数达到满意的效果。
三.附上代码
# -*- coding: utf-8 -*-
import cv2
#载入并显示图片
img=cv2.imread('1.jpg')
cv2.imshow('1',img)
#降噪(模糊处理用来减少瑕疵点)
result = cv2.blur(img, (5,5))
cv2.imshow('2',result)
#灰度化,就是去色(类似老式照片)
gray=cv2.cvtColor(result,cv2.COLOR_BGR2GRAY)
cv2.imshow('3',gray) #param1的具体实现,用于边缘检测
canny = cv2.Canny(img, 40, 80)
cv2.imshow('4', canny) #霍夫变换圆检测
circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadius=20)
#输出返回值,方便查看类型
print(circles) #输出检测到圆的个数
print(len(circles[0])) print('-------------我是条分割线-----------------')
#根据检测到圆的信息,画出每一个圆
for circle in circles[0]:
#圆的基本信息
print(circle[2])
#坐标行列(就是圆心)
x=int(circle[0])
y=int(circle[1])
#半径
r=int(circle[2])
#在原图用指定颜色圈出圆,参数设定为int所以圈画存在误差
img=cv2.circle(img,(x,y),r,(0,0,255),1,8,0)
#显示新图像
cv2.imshow('5',img) #按任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()
python下用OpenCV的圆形检测的更多相关文章
- OpenCV-Python(1)在Python中使用OpenCV进行人脸检测
OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头.然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码. 在开始之前, ...
- Python下的OpenCV学习 01 —— 在Linux下安装OpenCV
一.OpenCV简要介绍 OpenCV是一个跨平台的计算机视觉库,可以运行在Windows.Linux.MacOS等操作系统上.OpenCV提供了众多语言的接口,其中就包含了Python,Python ...
- Python下的OpenCV学习 02 —— 图像的读取与保存
OpenCV提供了众多对图片操作的函数,其中最基本的就是图片的读取与输出了. 一.读取图片 利用OpenCV读取一张图片是非常容易的,只需要用到 imread() 函数,打开shell或者cmd,进入 ...
- python中使用Opencv进行人脸检测
这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了. 关于人脸识别,首先需要了解的是级联分类器Casc ...
- python下使用opencv拍照
首先在命令中安装opencv: pip install opencv-python 然后打开notebook: jupyter notebook 建立文件,写入如下代码: import cv2 cap ...
- python 下 安装openCV
安装openCV openCV是Intel 创建的计算机视觉库,用于计算机图像处理. 安装anaconda,在命令行中输入conda install cv2/opencv 报错汇总 网络连接问题 报错 ...
- 【python下使用OpenCV实现计算机视觉读书笔记1】输入输出
说明: 该部分内容为<OpenCV Computer Vision with Python>读书笔记. 1.读入文件与保存. import cv2 image=cv2.imread('a. ...
- 【python下使用OpenCV实现计算机视觉读书笔记4】保存摄像头视频
读取摄像头内容,然后保存一段十秒钟的视频. import cv2 cameraCapture = cv2.VideoCapture(0) fps = 30 # an assumption size = ...
- Python下的opencv小问题大智慧
1.今晚日了狗了,图像显示不按照预期出现,然后突然就好了...... 2.根据第一个问题举一个例子,另一个我没保存... 是不是分不清楚???? plt.imshow(wjy2, cmap='gr ...
随机推荐
- 用LSTM分类 MNIST
LSTM是RNN的一种算法, 在序列分类中比较有用.常用于语音识别,文字处理(NLP)等领域. 等同于VGG等CNN模型在在图像识别领域的位置. 本篇文章是叙述LSTM 在MNIST 手写图中的使用 ...
- Rosenblatt感知器
一.定义 Rosenblatt感知器建立在一个线性神经元之上,神经元模型的求和节点计算作用于突触输入的线性组合,同时结合外部作用的偏置,对若干个突触的输入项求和后进行调节. 二.基本计算过程 Rose ...
- 关于JS中变量提升的规则和原理的一点理解(二)
上篇文章中讲到变量提升和函数提升的先后顺序时蒙了,后来去查了一下资料,特别整理一下. 在<你不知道的JavaScript(上卷)>一书的第40页中写到:函数会首先被提升,然后才是变量. 书 ...
- GNS3的配置
为了更好的了解协议我决定学习CCNA 安装好GNS3后我们打开 点击设置 先把iso解压,解压完成后倒入 保存结束 然后在输入idlepc get 设备名称 来计算idepc的值 idepc能让我们p ...
- set使用实例1+lower_bound(val)(个人模版)
set使用实例1+lower_bound(val): #include<stdio.h> #include<set> #include<iostream> #inc ...
- HDU6237-A Simple Stone Game-找素因子(欧拉函数)-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- ubuntu下使用nginx搭建流媒体服务器,实现视频点播
首先我们看如何实现视频点播,视频点播支持flv文件及H264编码视频,ACC编码音频的mp4文件: 第一步,创建单独的目录(因为软件较多,容易混乱),下载需要的软件: 我们需要下载nginx,pcre ...
- 【C#附源码】数据库文档生成工具支持(Excel+Htm)
数据库文档生成工具是用C#开发的基于NPOI组件的小工具.软件源码大小不到10MB.支持生成Excel 和Html 两种文档形式.了解更多,请访问:http://www.oschina.net/cod ...
- TI-RTOS 之 事件同步(Event, 类似semaphore)
TI-RTOS 之 事件同步(Event, 类似semaphore) Event 是类似Semaphore的存在,官方如下描述: SYS/BIOS events are a means of comm ...
- HDU 1233 还是畅通工程(模板——克鲁斯卡尔算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意描述: 输入n个城镇以及n*(n-1)/2条道路信息 计算并输出将所有城镇连通或者间接连通 ...