圆形检测算法-基于颜色和形状(opencv)

简介: 该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。

```
import cv2
import numpy as np

圆检测算法

def detect(img):

# 定义红色、蓝色、白色的hsv区间文件
red1 = np.array([0, 100, 46])
red2 = np.array([8, 255, 255])

white1 = np.array([0, 0, 221])
white2 = np.array([180, 30, 255])

blue1 = np.array([100, 43, 46])
blue2 = np.array([124, 255, 255])
# 从rgb转到hsv颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 找到每个像素的值,得到对应的单色图像
mask_red = cv2.inRange(hsv, red1, red2)
mask_white = cv2.inRange(hsv, white1, white2)
mask_blue = cv2.inRange(hsv, blue1, blue2)

result_red = cv2.bitwise_and(img, img, mask=mask_red)
result_white = cv2.bitwise_and(img, img, mask=mask_white)
result_blue = cv2.bitwise_and(img, img, mask=mask_blue)

# 对图像进行灰度化
gray_red = cv2.cvtColor(result_red, cv2.COLOR_BGR2GRAY)
gray_white = cv2.cvtColor(result_white, cv2.COLOR_BGR2GRAY)
gray_blue = cv2.cvtColor(result_blue, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行轮廓提取,更加面积,去除较大或较小面积,保存和圆相同的面积轮廓
_, contours, heridency = cv2.findContours(gray_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
_, contours2, heridency = cv2.findContours(gray_white, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 定义绘制字体
font = cv2.FONT_HERSHEY_SIMPLEX
# 红色轮廓
for i in contours:
    # 计算轮廓面积
    area = cv2.contourArea(i)
    # 当面积在500-2000之间,才进行圆检测
    if 500 < area < 2000:
        circles_red = cv2.HoughCircles(gray_red, cv2.HOUGH_GRADIENT, 1,
                                       50, param1=150, param2=20, minRadius=5, maxRadius=14)
        # 若不为空,则进行绘制
        if circles_red is not None:
            circles_1 = np.uint16(np.around(circles_red))
            for i in circles_1[0, :]:
                cv2.circle(img, (i[0], i[1]), i[2], (0, 0, 255), 2)  # 画圆
                cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 2)  # 画圆心
                cv2.putText(img, 'red', (i[0], i[1]), font, 0.8, (0, 0, 255), 2)
# 白色轮廓
for i in contours2:
    area = cv2.contourArea(i)
    if 350 < area < 1500:

        circles_white = cv2.HoughCircles(gray_white, cv2.HOUGH_GRADIENT, 1,
                        20, param1=35, param2=20, minRadius=0, maxRadius=30)

        if circles_white is not None:
            circles_2 = np.uint16(np.around(circles_white))
            for i in circles_2[0, :]:
                cv2.circle(img, (i[0], i[1]), i[2], (255, 255, 255), 2)  # 画圆
                cv2.circle(img, (i[0], i[1]), 2, (255, 255, 255), 2)  # 画圆心
                cv2.putText(img, 'white', (i[0], i[1]), font, 0.8, (255, 255, 255), 2)

# 因蓝色轮廓较少,所以不需要进行轮廓提取
circles_blue = cv2.HoughCircles(gray_blue, cv2.HOUGH_GRADIENT, 1,
                        50, param1=35, param2=20, minRadius=5, maxRadius=25)

if circles_blue is not None:
    circles_3 = np.uint16(np.around(circles_blue))
    for i in circles_3[0, :]:
        cv2.circle(img, (i[0], i[1]), i[2], (255, 0, 0), 2)  # 画圆
        cv2.circle(img, (i[0], i[1]), 2, (255, 0, 0), 2)  # 画圆心
        cv2.putText(img, 'blue', (i[0], i[1]), font, 0.8, (255, 0, 0), 2)

return img

cap = cv2.VideoCapture('demo/DSC_0001.MOV')

while(cap.isOpened()):
ret, frame = cap.read()
frame = cv2.resize(frame, (640, 480))
result = detect(frame)
cv2.imshow('frame', result)
if cv2.waitKey(25) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()

目录
相关文章
|
2月前
|
监控 安全 算法
137_安全强化:输入过滤与水印 - 实现输出水印的检测算法与LLM安全防护最佳实践
随着大语言模型(LLM)在各行业的广泛应用,安全问题日益凸显。从提示注入攻击到恶意输出生成,从知识产权保护到内容溯源,LLM安全已成为部署和应用过程中不可忽视的关键环节。在2025年的LLM技术生态中,输入过滤和输出水印已成为两大核心安全技术,它们共同构建了LLM服务的安全防护体系。
|
3月前
|
传感器 资源调度 算法
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
本文提出一种多子带相干累积(MSCA)算法,通过引入空带和子带相干处理,解决DDMA-MIMO雷达的多普勒模糊与能量分散问题。该方法在低信噪比下显著提升检测性能,实测验证可有效恢复目标速度,适用于车载雷达高精度感知。
509 4
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
3月前
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
100 1
|
6月前
|
机器学习/深度学习 运维 监控
实时异常检测实战:Flink+PAI 算法模型服务化架构设计
本文深入探讨了基于 Apache Flink 与阿里云 PAI 构建的实时异常检测系统。内容涵盖技术演进、架构设计、核心模块实现及金融、工业等多领域实战案例,解析流处理、模型服务化、状态管理等关键技术,并提供性能优化与高可用方案,助力企业打造高效智能的实时异常检测平台。
484 1
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
294 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
5月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
163 0
|
6月前
|
机器学习/深度学习 监控 算法
面向办公室屏幕监控系统的改进型四叉树屏幕变化检测算法研究
本文提出一种改进型四叉树数据结构模型,用于优化办公室屏幕监控系统。通过动态阈值调节、变化优先级索引及增量更新策略,显著降低计算复杂度并提升实时响应能力。实验表明,该算法在典型企业环境中将屏幕变化检测效率提升40%以上,同时减少资源消耗。其应用场景涵盖安全审计、工作效能分析及远程协作优化等,未来可结合深度学习实现更智能化的功能。
125 0
|
9月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
10月前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。