使用opencv识别同心圆

使用过opencv视觉库的小伙伴都知道,opencv自带的函数HoughCircles()可以用来检测圆,但无法直接检测同心圆。所以当我们在识别靶盘的时候,需要对该函数进行改进应用,以下是我的思路:
1. 对原图像进行边缘检测
2. 运用HoughCircles()函数,将其中的半径参数加以限制,由小到大扫描。取出每次扫描得分值最高的圆
3. 计算这些圆的圆心距,找出最小的圆心距,然后以该圆心为基准,判断其他圆与该圆心的距离。若小于一个阈值,则视为该圆的同心圆。

初步效果如下:
这里写图片描述

可以看出,可以有效检测出同心圆,但也有被误检的情况。调整一下参数可以改善检测的情况。实际中通过外置摄像头检测靶盘,亲测有效。

VS2013工程下载地址http://download.csdn.net/detail/u011853479/9377731

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Opencv是一个强大的开源计算机视觉库,可以用于图像处理和模式识别等多个领域。识别两个同心圆的问题,可以通过以下步骤实现: 1. 读取图像并将其转换为灰度图像,便于处理。 2. 使用霍夫变换检测图像中的所有圆形。例如,使用cv2.HoughCircles()函数。 3. 对于每个检测到的圆形,计算其圆心和半径。 4. 对于每个圆形,检查其是否为同心圆同心圆是一个圆心相同但半径不同的圆形对。 5. 找到同心圆并将其标记在图像上。例如,可以使用cv2.circle()函数将圆形画在图像上。 需要注意的是,同心圆识别需要保证圆心误差比较小,因此在进行霍夫变换时需要设置合适的参数。同时,对于大量的检测结果也需要进行筛选和排序,便于找到同心圆。最后,通过合适的输出或者可视化方式,可视化识别结果进行验证与评估。 ### 回答2: 要实现同时识别两个同心圆,需要采用一系列图像处理算法和编程技巧。下面是一些步骤,可用于实现此功能: 1. 加载图像:首先,需要使用cv::imread()函数加载待处理图像。 2. 图像预处理:进行图像分割,并使用cv::cvtColor()函数将图像转换为灰度图像。 3. 霍夫圆变换:在图像上运行cv::HoughCircles()函数以检测同心圆。 4. 圆检测使用cv::Point()函数确定每个圆心,并使用cv::circle()函数绘制检测到的圆。 5. 确认双圆: 检查每个检测到的圆是否符合一组同心圆的条件。 如果这样,就可以继续识别另一个同心圆。可以使用类似的方法找到它,并检查它是否和先前识别的圆同心。 总之,opencv可以同时识别两个同心圆,但需要对图像进行预处理,在关闭检测过程时进行正确的圆检测,并对结果进行确认以确定同心圆对。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值