Python-opencv实现目标检测定位:判断固定颜色物体是否在规定区域内

一、简介

主要实现实时检测视频或者摄像头中出现的固定颜色(本例中使用绿色)是否在规定的区域范围内,并将结果反馈到原视频上。

二、效果

实现的效果如下图所示:

1、当绿色物体出现在屏幕中的黑框中时,在视频左上角反馈一个“True”的信息。

2、当绿色物体出现在屏幕中但没有完全出现在黑框中时,在视频左上角反馈一个“Flase”的信息。

3、当绿色物体没有出现在屏幕中时,不显示任何信息。

三、代码

运行环境:python 3.8.17      opencv 4.8.0

下面是完整代码:

import numpy as np
import cv2

cap = cv2.VideoCapture("video.mp4")  # 将"video.mp4"换为0,即可调用摄像头
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取视频的宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取视频的高度
print(width, height)
# 下面是规定区域的位置设置
w1 = 400
h1 = 400
x1 = int(width / 2 - w1 / 2)
y1 = int(height / 2 - h1 / 2 - 100)
# print(x1, y1, x1 + w1, y1 + h1)
font = cv2.FONT_HERSHEY_SIMPLEX  # 设置字体样式
kernel = np.ones((5, 5), np.uint8)  # 卷积核

if cap.isOpened() is True:  # 检查摄像头是否正常启动
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 转换为灰色通道
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)  # 转换为HSV空间

        lower_green = np.array([35, 50, 100])  # 设定绿色的阈值下限
        upper_green = np.array([77, 255, 255])  # 设定绿色的阈值上限
        # 消除噪声
        mask = cv2.inRange(hsv, lower_green, upper_green)  # 设定掩膜取值范围
        opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)  # 形态学开运算
        bilateral = cv2.bilateralFilter(mask, 10, 200, 200)  # 双边滤波消除噪声
        edges = cv2.Canny(opening, 50, 100)  # 边缘识别

        # 在原视频上跟踪目标绘制绿色矩形框
        contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        for contour in contours:
            x, y, w, h = cv2.boundingRect(contour)  # 获取轮廓的边界框
            # print(x, y, w, h)
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 在原视频上绘制矩形框
            # 判断位置关系
            if x >= x1 and y >= y1 and x + w <= x1 + w1 and y + h <= y1 + h1:
                result = "True"
            else:
                result = "Flase"
            cv2.putText(frame, result, (10, 30), font, 1.0, (255, 0, 255), 2)

        # 在原视频上绘制限定区域框
        cv2.rectangle(frame, (x1, y1), (x1 + w1, y1 + h1), (0, 0, 0), 2)  # frame要绘制的帧,四个坐标点,颜色,线宽

        cv2.imshow('edges', edges)
        cv2.imshow('frame', frame)
        k = cv2.waitKey(5) & 0xFF
        # 按Esc键退出
        if k == 27:
            break
    cap.release()
    cv2.destroyAllWindows()
else:
    print('cap is not opened!')

可以将cv2.rectangle(frame, (x1, y1), (x1 + w1, y1 + h1), (0, 0, 0), 2)缩进,把固定区域框的颜色从黑色(0,0,0)换为变量color,与判定结果"True""Flase"关联,设为两种不同的颜色,即可只管看到区域之间的位置关系。

缺点:对噪声处理不完全,在分割边缘的时候会产生噪点。

参考自,侵删:OpenCV-Python——实现圆形检测与追踪_opencv打开摄像头检测圆的中心位置python_YukinoSiro的博客-CSDN博客

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python OpenCV是一种广泛使用的开源计算机视觉库,可用于从图像和视频中提取信息并执行各种任务,如人脸识别、特征提取、对象检测等。对象检测是OpenCV中最常用的任务之一,用户可以使用许多技术来识别和跟踪特定的物体。 在Python OpenCV中进行对象检测需要进行以下步骤: 1. 确定要检测的物体并准备相应的数据集,包括目标图像和负样本图像。 2. 提取目标图像中的特征,通常使用SIFT、SURF或ORB算法。 3. 训练分类器,这通常使用支持向量机(SVM)或随机森林算法。 4. 在待检测图像中使用分类器来检测目标物体。 5. 如果需要跟踪检测到的物体,则需要使用在找到目标后的特定区域中进行跟踪的算法。 Python OpenCV中常用的用于对象检测的技术包括Haar级联检测、基于HOG特征的分类器和深度学习技术。 Haar级联检测是一种基于机器学习的对象检测方法,它是通过检测目标对象的定期重叠子区域实现的。这被称为Haar特征,并且可以检测目标物体的各种形状和大小。Haar级联分类器可以在图像中高效地检测目标,并且具有速度快、准确性高和适应性强等优点。 基于HOG特征的分类器是一种与Haar级联检测类似的方法。HOG(方向梯度直方图)特征是一种常用的图像特征提取方法,它能够描述图像内每个位置的梯度信息,并利用直方图对这些信息进行编码。HOG特征用于训练支持向量机分类器,以实现物体检测。由于它可以处理部分遮挡和形变的情况,因此被广泛用于目标检测。 深度学习技术已经被证明是一种非常有效的对象检测方法。它通过利用神经网络(如卷积神经网络或R-CNN)进行物体检测,在各种情况下都表现出较高的鲁棒性和准确性。深度学习技术通常需要大量的训练数据和计算资源,但是通过预训练模型和迁移学习技术,可以轻松地在特定场景中进行目标检测。 综上所述,Python OpenCV提供了许多对象检测技术和算法,用户可以根据不同的需求和情况来选择合适的方法。对于简单的对象检测应用,Haar级联检测和基于HOG特征的分类器可能是最好的选择。对于更复杂和广泛的应用,深度学习技术可能是更好的选择。无论选择哪种方法,Python OpenCV都提供了丰富的API和工具来简化实现和调试。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值