通过OpenCv的HoughCircles函数获取图片中的圆形
话不多说,代码如下:
int main(){Mat srcImage,grayImage;/*加载图片*/srcImage = imread(path);/*判断加载是否成功*/if(srcImage.empty()){cout<<"load pic fail"<<endl;}/*开辟dst矩阵,注意需与src矩阵大小类型一致*/Mat dstImage(srcImage.size(),srcImage.type());/*将src矩阵转化为灰度矩阵*/cvtColor(srcImage,grayImage,COLOR_BGR2GRAY);/*对灰度矩阵进行图像平滑处理(高斯模糊)*/GaussianBlur(grayImage,grayImage,Size(9,9),2,2);vector<Vec3f> circles;/*获取图片中的圆形*/HoughCircles(grayImage,circles,HOUGH_GRADIENT,1.6,10,230,40,12,20);/*在dst矩阵中绘制圆心与圆形*/for(size_t var = 0 ; var < circles.size() ; ++var){Point center(cvRound(circles[var][0]),cvRound(circles[var][1]));int radius = cvRound(circles[var][2]);circle(dstImage,center,0,Scalar(0,255,0));circle(dstImage,center,radius,Scalar(255,0,0));}/*显示src矩阵与dst矩阵*/imshow("src image",srcImage);imshow("circle image",dstImage);
}
Note
dstImage
的大小以及通道类型需与原图一致
HoughCircles
为全文最关键的函数,其作用在于获取图片中所有圆形的圆心坐标
以及半径
,调用此函数需细调其参数以确定所要获取的圆形的类型,它的内部参数含义如下:
- void HoughCircles(InputArray image,OutputArray circles, int method, double dp, double minDist, double param1=100,double param2=100, int minRadius=0, int maxRadius=0 )
- image: 8bit,单通道的灰度图数据
- circles: 寻找到的圆形数据的输出向量,每个向量中包含3/4个元素,其含义位(x,y,radius)/(x,y,radius,votes)
- method: 检测方法,有HOUGH_GRADIENT以HOUGH_GRADIENT_ALT两种方法选择及
- dp: 累加器分辨率与图像分辨率的反比,如果dp=1,累加器的分辨率与输入图像相同。如果dp=2,蓄能器有宽度和高度的一半。对于HOUGH_梯度_ALT,建议值为dp=1.5,
- minDist: 检测到的圆中心之间的最小距离。如果参数是太小,除了一个真实的圆外,可能会错误地检测到多个相邻圆。如果是的话太大,可能会漏掉一些圆圈
- param1: 在HOUGH_GRADIENT和HOUGH_GRADIENT_ALT两种模式时,它是传递给Canny边缘检测器的两个阈值中较高的一个(较低的阈值小两倍),注意HOUGH_GRADIENT_ALT模式使用Scharr 算法,所以阈值通常较高
- param2: 该值越小,可以检测到更多根本不存在的圆,该值越大,能通过检测的圆就更加接近完美的圆形
- minRadius: 检测圆形的最小半径
- maxRadius: 检测圆形的最大半径s
通过OpenCv的HoughCircles函数获取图片中的圆形相关推荐
- 遍历图像 找最小外接矩形 matlab,2018a版本MatLab利用regionprops函数获取图片中物体轮廓最小外接矩形...
2018a版本MatLab利用regionprops函数获取图片中物体最小外接矩形 本次内容,用于介绍利用matlab中的regionprops函数来获取图像区域中的物体的最小外接矩形信息(位置(x, ...
- np.unique函数获取mask图片中不同像素数
np.unique函数获取mask图片中不同像素数 @Data 2022/12/9 代码: import os import numpy as np from PIL import Imagedef ...
- [548]OpenCV之cv2函数
1.主要函数 1. cv2.imread():读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片,包括 cv2.IMREAD_COLOR:读入一副彩色图片:cv2.IMRE ...
- Opencv的使用小教程2——Opencv常用图像处理函数汇总
Opencv的使用小教程2--Opencv常用图像处理函数汇总 1.blur 2.GaussianBlur 3.medianBlur 4.bilateralFilter 5.腐蚀和膨胀 6.morph ...
- 图像边缘检测--OpenCV之cvCanny函数
图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...
- opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用
opencv python 从摄像头获取视频.帧率.分辨率等属性设置和使用 文章目录: 1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件 ...
- 【opencv】selective_search函数
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,Tensor ...
- HoughCircles()函数 画圆心和圆的轮廓
代码如下: #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespa ...
- OpenCV各模块函数使用实例(5)--特征检测(Feature Detection)
特征检测是检测图像中的特征信息,比如边缘,线段,角点位置等.在OpenCV中提供了各种特征检测函数和特征提取函数,其中包括有边缘检测(canny),角点检测等,如:Harris角点.ShiTomasi ...
最新文章
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
- 695.岛屿的最大面积
- php的数据校验,php 数据类型校验函数的简单示例
- [ARM-assembly]-ARMV8的exclusive和inexclusive的介绍
- 密码登录模式流程分析
- 【好文】为什么必须学好.Net Core?怎样弯道超车新年高薪?这样做,一周就够了!(文末彩蛋)...
- c语言二叉树构造与输出,C语言数据结构树状输出二叉树,谁能给详细的解释一下...
- obj.val 非数组_在Ruby中使用Array.new(size,obj)创建数组
- 程序员的进阶课-架构师之路(18)-图
- 上海理工大学:用数字技术打响智慧抗疫信息战
- linux分区个数,Linux分区个数限制
- [论文阅读] Learning a Unified Classifier Incrementally via Rebalancing
- 算法笔记_面试题_6.二进制/位运算相关
- android camera 废弃,在Ubuntu系统基于ROS使用废旧Android手机摄像头搭建监控设备
- 绑定流详解——网络测试仪实操
- float函数python作用_Python内置函数float()
- 黑群晖XPEnoboot for DSM 5.2-5967.1
- Wireshark 提示和技巧 | TCP Reassembly
- 正高、正常高、大地高
- stellarium-0.19.3.1-win64.exe下载
热门文章
- Mac下安装homebrew(解决error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL)
- 红队渗透测试技术:如何通过鱼叉式网络钓鱼获得攻击机会?
- html语言加图片,html代码——给图片加边框代码
- 【学习笔记+习题集】字符相关(输入输出流,字典树,AC自动机,后缀自动机)(4598字)(更新至2022.12.28)
- SlidesJS基本使用方法
- lab值意义_lab是什么意思?
- 从零搭建 SpringCloud 服务
- HTML5期末大作业:英雄联盟网站设计——英雄联盟LOL(4页) HTML+CSS+JavaScript web期末网站设计大作业
- jQuery 选择器 选取 class 为 intro 的 p 元素
- JQuery替换元素