【OpenCV】高精度识别圆(支持复杂场景下的圆)

这篇具有很好参考价值的文章主要介绍了【OpenCV】高精度识别圆(支持复杂场景下的圆)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 OpenCV 霍夫变换-圆检测,对周围背景比较敏感,容易误识别,不受控。若你也有此困惑,建议试试本文中的方法,识别效果佳,能够很好地排除类圆矩形的干扰,话不多说直接上代码。

代码

一、实现类

import math

import cv2


class CircleDetector(object):

    '''
	Parameters
	----------
	img: ndarray
		A color image.
	threshold: int or float
        Image binary threshold.
	minRadius: int or float
		Minimum value of circle radius.
	maxRadius: int or flaot
		Maximum value of circle radius.

	Returns
	-------
	A tuple of (center(x, y), size(w, h), angle)
	'''
    def detectCircles(self, image, threshold, minRadius, maxRadius):
        circles = list()
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        blur_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
        ret, thresh = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY)
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5), (-1, -1))
        thresh = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, (-1, -1))
        thresh = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, (-1, -1))

        contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        for cnt in contours:
            if len(cnt) < 5:
                continue

            area = cv2.contourArea(cnt)
            if area < (minRadius**2) * math.pi or area > (maxRadius**2) * math.pi:
                continue

            arc_length = cv2.arcLength(cnt, True)
            radius = arc_length / (2 * math.pi)

            if not (minRadius < radius and radius < maxRadius):
                continue

            ellipse = cv2.fitEllipse(cnt)
            ratio = float(ellipse[1][0]) / float(ellipse[1][1])

            if ratio > 0.9 and ratio < 1.1:
                corner = cv2.approxPolyDP(cnt, 0.02 * arc_length, True)
                cornerNum = len(corner)
                if cornerNum > 4: # 当cornerNum=4时,识别矩形;而cornerNum>4时,识别圆
                    circles.append(ellipse)

        return circles

二、使用

import cv2

from detector.circle_detector import CircleDetector

if __name__ == '__main__':
    src = 0
    cap = cv2.VideoCapture(src)

    detector = CircleDetector()
    
    while True:
        if not cap.isOpened():
            print('相机未打开')
            break

        ret, frame = cap.read()

        if not ret:
            continue

        circles = detector.detectCircles(frame, 158, 50, 200)
        img = frame.copy()

        for circle in circles:
            cv2.circle(img, (int(circle[0][0]), int(circle[0][1])), int(20), (0, 255, 0), thickness=5)

        cv2.imshow('image', img)
        key = cv2.waitKey(int(1000/30)) & 0xFF
        if key == ord(' '):
            break

三、注意事项

如果遇到无法识别,或者误识别,注意调整参数。

  1. 确保你图中所绘圆的半径在[minRadius, maxRadius]之间。
  2. 建议使用白背景黑圆作为识别目标,否之请自行调整Threshold,直到识别效果达到最佳状态(可以查看二值化图片进行分析)。

效果图

opencv识别圆形,1024程序员节,opencv,python,计算机视觉文章来源地址https://www.toymoban.com/news/detail-620902.html

到了这里,关于【OpenCV】高精度识别圆(支持复杂场景下的圆)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于深度学习的高精度奶牛检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度奶牛检测识别系统可用于日常生活中或野外来检测与定位奶牛目标,利用深度学习算法可实现图片、视频、摄像头等方式的奶牛目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月08日
    浏览(36)
  • 基于深度学习的高精度袋鼠检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度袋鼠检测识别系统可用于日常生活中或野外来检测与定位袋鼠目标,利用深度学习算法可实现图片、视频、摄像头等方式的袋鼠目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月08日
    浏览(42)
  • 基于深度学习的高精度动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度动物检测识别系统可用于日常生活中或野外来检测与定位动物目标(狼、鹿、猪、兔和浣熊),利用深度学习算法可实现图片、视频、摄像头等方式的动物(狼、鹿、猪、兔和浣熊)目标检测识别,另外支持结果可视化与图片或视频检测结果的导

    2024年02月08日
    浏览(75)
  • 基于深度学习的高精度刀具检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度刀具检测识别系统可用于日常生活中或野外来检测与定位刀具目标,利用深度学习算法可实现图片、视频、摄像头等方式的刀具目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月13日
    浏览(39)
  • 基于深度学习的高精度鸡蛋检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度鸡蛋检测识别系统可用于日常生活中或野外来检测与定位鸡蛋目标,利用深度学习算法可实现图片、视频、摄像头等方式的鸡蛋目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月11日
    浏览(55)
  • 基于深度学习的高精度水果检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度水果(苹果、香蕉、葡萄、橘子、菠萝和西瓜)检测识别系统可用于日常生活中或野外来检测与定位水果目标,利用深度学习算法可实现图片、视频、摄像头等方式的水果目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统

    2024年02月11日
    浏览(42)
  • 基于深度学习的高精度烟雾检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度烟雾检测识别系统可用于日常生活中或野外来检测与定位烟雾目标,利用深度学习算法可实现图片、视频、摄像头等方式的烟雾目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月11日
    浏览(47)
  • 基于深度学习的高精度鸽子检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度鸽子检测识别系统可用于日常生活中或野外来检测与定位鸽子目标,利用深度学习算法可实现图片、视频、摄像头等方式的鸽子目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月09日
    浏览(43)
  • 基于深度学习的高精度猴子检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度猴子检测识别系统可用于日常生活中或野外来检测与定位猴子目标,利用深度学习算法可实现图片、视频、摄像头等方式的猴子目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月12日
    浏览(66)
  • 基于深度学习的高精度绵羊检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度绵羊检测识别系统可用于日常生活中或野外来检测与定位绵羊目标,利用深度学习算法可实现图片、视频、摄像头等方式的绵羊目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包