opencv项目实战目标检测:自动检测出现的所有动态目标(代码片段)

胖墩会武术 胖墩会武术     2023-03-05     201

关键词:

文章目录

实时动态目标检测

一、项目思路

1、获取视频、读取帧图像
2、计算连续两张图像的像素绝对差获取动态目标
3、图像预处理:灰度图、高斯模糊、二值化、膨胀
4、轮廓检测、绘制矩阵轮廓、绘制物体轮廓
5、分别实时显示矩阵轮廓、物体轮廓

python进阶——人工智能实时目标跟踪

二、算法详解

2.1、计算两个数组或数组与标量之间的每个元素的绝对差。

函数说明:cv2.absdiff(src1, src2)
输入参数:
			src1:第一个输入数组或标量
			src2:第二个输入数组或标量

2.2、轮廓检测 + 绘制物体轮廓 + 绘制矩阵轮廓

######################################################################
# (1)轮廓检测:contours, hierarchy = cv2.findContours(img, mode, method)
# 输入参数      mode: 轮廓检索模式
#                   (1)RETR_EXTERNAL:  只检索最外面的轮廓;
#                   (2)RETR_LIST:      检索所有的轮廓,但检测的轮廓不建立等级关系,将其保存到一条链表当中,
#                   (3)RETR_CCOMP:     检索所有的轮廓,并建立两个等级的轮廓。顶层是各部分的外部边界,内层是的边界信息;
#                   (4)RETR_TREE:      检索所有的轮廓,并建立一个等级树结构的轮廓;(最常用)
#               method: 轮廓逼近方法
#                   (1)CHAIN_APPROX_NONE:      存储所有的轮廓点,相邻的两个点的像素位置差不超过1。               例如:矩阵的四条边。(最常用)
#                   (2)CHAIN_APPROX_SIMPLE:     压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标。   例如:矩形的4个轮廓点。
# 输出参数      contours:所有的轮廓
#               hierarchy:每条轮廓对应的属性
# 备注0:轮廓就是将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。
# 备注1:函数输入图像是二值图,即黑白的(不是灰度图)。所以读取的图像要先转成灰度的,再转成二值图。
# 备注2:函数在opencv2只返回两个值:contours, hierarchy。
# 备注3:函数在opencv3会返回三个值:img, countours, hierarchy
######################################################################
# (2)绘制轮廓:v2.drawContours(image, contours, contourIdx, color, thickness) ———— (在图像上)画出图像的轮廓
# 输入参数        image:              需要绘制轮廓的目标图像,注意会改变原图
#                 contours:           轮廓点,上述函数cv2.findContours()的第一个返回值
#                 contourIdx:         轮廓的索引,表示绘制第几个轮廓。-1表示绘制所有的轮廓
#                 color:              绘制轮廓的颜色(RGB)
#                 thickness:          (可选参数)轮廓线的宽度,-1表示填充
# 备注:图像需要先复制一份copy(), 否则(赋值操作的图像)与原图会随之一起改变。
######################################################################
# (3)绘制矩形边框:cv2.rectangle(img, (x, y), (x+w, y+h), color, thickness)
#       (x, y):         矩形定点
#       (x+w, y+h):     矩形的宽高
#       color:      	 矩形的边框颜色(0, 255, 0)
#       thickness:      矩形边框宽度
######################################################################

2.3、连续窗口显示

# 显示图像:cv2.imshow(window_title, img)
# 输入参数		window_title:		自定义窗口的名字
#     			img:				待显示图像
# 备注1:窗口会自适应图像大小
# 备注2:指定多个窗口名称,可以显示多幅图像
# 备注3:显示多幅图像的时候,若cv2.imshow()指定相同的窗口名,这样后面显示的图像会覆盖前面的图像,从而只产生一个(连续)窗口。

2.4、读取视频,显示视频,保存视频

OpenCV—读取视频,显示视频,保存视频


三、项目实战:实时动态目标检测

import cv2

# (1)参数设置
Pixel_points = 500  # 像素点数(只检测大于该值的目标,小于该值的目标自动忽略)
video_path = r'C:\\Users\\my\\Videos\\car.mov'  # 视频存放地址(路径中不能有中文,将导致读取失败。)

if __name__ == '__main__':
    # (2)读取视频
    cap = cv2.VideoCapture(video_path)      # 读取视频流
    _, frame1 = cap.read()                  # 读取第一帧
    _, frame2 = cap.read()                  # 读取第二帧

    while cap.isOpened():  # 检测视频是否可以打开
        # (3)图像预处理
        diff = cv2.absdiff(frame1, frame2)                              # 计算两张图像之间的每个像素的绝对差
        gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)                   # 灰度图
        blur = cv2.GaussianBlur(gray, (5, 5), 0)                        # 高斯滤波
        _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)     # 二值化
        mask = cv2.dilate(thresh, None, iterations=3)                   # 膨胀操作

        contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # 轮廓检测
        # (4)轮廓检测
        for contour in contours:
            (x, y, w, h) = cv2.boundingRect(contour)        # 获取矩阵轮廓的宽和高
            if cv2.contourArea(contour) < Pixel_points:     # 判断检测得到的矩形轮廓,体积是否满足大小设置
                continue
            cv2.rectangle(frame1, pt1=(int(x), int(y)), pt2=(int(x) + int(w), int(y) + int(h)), color=(0, 0, 255), thickness=10)      # 绘制矩形轮廓
            # cv2.drawContours(frame1, contours, -1, (0, 255, 0), 2)															# 绘制物体轮廓

        # (5)绘图
        cv2.imshow('frame', frame1)         # 实时显示轮廓图Frame
        # cv2.imshow('mask', mask)			# 实时显示掩膜图MASK
        frame1 = frame2                     # 保存当前帧(循环-计算最近的两帧图像的像素差)
        ret, frame2 = cap.read()            # 读取下一帧(循环-计算最近的两帧图像的像素差)

        # (6)如果读到的帧数不为空,则继续读取;如果为空,则退出。
        if frame2 is None:
            break

        # (7)使用 waitKey 可以控制视频的播放速度。数值越小,播放速度越快。
        if cv2.waitKey(50) == ord(' '):  # ord(' '): 按空格结束
            break

    cap.release()            # 释放摄像头
    cv2.destroyAllWindows()  # 摧毁所有图窗

windows版yolov4目标检测实战:训练自己的数据集

...程演示环境:Windows10;cuda10.2;cudnn7.6.5;Python3.7;VisualStudio2019;OpenCV3.4需要学习ubuntu系统YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》https://edu.51cto.com/course/22982.htmlYOLOv4来了!速度和精度双提升!与YOLOv3相比,新版本... 查看详情

课题总结opencv抠图项目实战边缘检测(代码片段)

Python小白的课题报告—OpenCV抠图项目实战(7)本系列是Python小白的课题作业《基于OpenCV的图像分割和抠图》。需要说明的是,本系列并不能算是OpenCV的抠图项目教程,只是以此为主题的课题报告。其中包括了一个... 查看详情

课题总结报告opencv抠图项目实战边缘检测(代码片段)

Python小白的课题报告—OpenCV抠图项目实战(7)本系列是Python小白的课题作业《基于OpenCV的图像分割和抠图》。需要说明的是,本系列并不能算是OpenCV的抠图项目教程,只是以此为主题的课题报告。其中包括了一个... 查看详情

自动驾驶感知算法实战4——目标检测网络详解(r-cnnfastr-cnnyolossd等)

自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html目录1导言:目标检测的任务表述2.目标检测经典工作回顾2.1两阶段(2-stage)检测模型2.1.1R-CNN:R-CNN系列的开山之作小结2.1.2FastR-CNN:共享卷积运算小结2.1.3FasterR-CN... 查看详情

传统目标检测实战:hog+svm(代码片段)

....2何为传统目标检测1.3传统目标检测方法不足2.先验知识3.项目框架3.1文件架构3.2方法简要介绍4.工具函数(utils.py)5.特征提取(extract_feature.py)6.训练分类器(train.py)7.测试(test.py)8.困难样本挖... 查看详情

自动驾驶感知算法实战4——目标检测网络详解(r-cnnfastr-cnnyolossd等)

自动驾驶感知算法实战专栏:https://blog.csdn.net/charmve/category_12097938.html目录1导言:目标检测的任务表述2.目标检测经典工作回顾2.1两阶段(2-stage)检测模型2.1.1R-CNN:R-CNN系列的开山之作小结2.1.2FastR-CNN:共享卷积运算小结2.1.3FasterR-CN... 查看详情

实战:使用opencv的自动驾驶汽车车道检测(附代码)

听说今天是七夕节?????老粉丝一定知道我一向是很宠粉的,七夕节也要给大家一个惊喜。答应我,看完这篇文章,文末有惊喜等着你~一、边缘检测我们将使用Canny进行边缘检测。如果你不确定这是什么,... 查看详情

计算机视觉项目实战-目标检测与识别(代码片段)

...本博客😊😊😊本次博客内容将继续讲解关于OpenCV的相关知识🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolov5)... 查看详情

(项目笔记)opencv目标检测程序(代码片段)

本跟踪程序核心为OpenCV里BackgroundSubtractorMOG2()类。该类通过对当前帧和背景模板的每个像素做减法,来区分前景和背景物体。这一算法只适用于背景相对固定的情况,如固定摄像头。对于跟踪小车这种需要实时更新背景的... 查看详情

yolo目标检测实战项目『原理篇』

参考技术A在目标检测中,IoU为预测框(Prediction)和真实框(Groundtruth)的交并比。如下图所示,在关于小猫的目标检测中,紫线边框为预测框(Prediction),红线边框为真实框(Groundtruth)。在目标检测任务中,通常取IoU≥0.5,认为召回。如... 查看详情

自动驾驶中的深度学习模型量化部署加速实战

...AI算法落地的模型部署,其中有基于TensorRT的部署、基于OpenCV+CUDA的部署以及基于NCNN的部署,项目包括简单的demo案例、目标检测、语义分割、实例分割、车道线检测以及Transformer等。大家可以参考以下的链接进行学习和指正。#模... 查看详情

自动驾驶中的深度学习模型量化部署加速实战

...AI算法落地的模型部署,其中有基于TensorRT的部署、基于OpenCV+CUDA的部署以及基于NCNN的部署,项目包括简单的demo案例、目标检测、语义分割、实例分割、车道线检测以及Transformer等。大家可以参考以下的链接进行学习和指正。#模... 查看详情

使用pytorch和opencv实现实时目标检测系统

...检测模型在过去十年中取得的惊人进步相去甚远。将其与OpenCV等库的图像处理能力相结合,如今在数小时内构建实时对象检测系统原型要容易得多。在本指南中,我们将尝试向您展示如何开发用于简单对象检测应用程序... 查看详情

openCV中的目标检测

】openCV中的目标检测【英文标题】:ObjectDetectioninopenCV【发布时间】:2010-02-1110:04:26【问题描述】:我使用OpenCV用VisualC++编写的程序有问题:我必须从网络摄像头捕获帧并找到所有各种矩形(颜色无关紧要)。我尝试修改c,square... 查看详情

opencv实战(15)——轮廓检测详解(代码片段)

OpenCV实战(15)——轮廓检测详解0.前言1.提取区域轮廓1.1轮廓提取1.2复杂轮廓分析2.计算区域形状描述符2.1四边形检测3.完整代码小结系列链接0.前言在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此&#x... 查看详情

python-项目实战--飞机大战-碰撞检测

目标了解碰撞检测方法碰撞实现1.了解碰撞检测方法pygame提供了两个非常方便的方法可以实现碰撞检测:pygame.sprite.groupcollide()两个精灵组中所有的精灵的碰撞检测groupcollide(group1,group2,dokill1,dokill2,collided=None)->Sprite_dict如... 查看详情

yolov3目标检测实战:交通标志识别

在无人驾驶中,交通标志识别是一项重要的任务。本项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别。具体项目过程包括包括:安装Darknet、下载LISA交通标志数据集、数据集格式转换、修... 查看详情

OpenCV检测项目的多个实例

】OpenCV检测项目的多个实例【英文标题】:OpenCVdetectmultipleinstancesofitem【发布时间】:2015-03-2002:05:22【问题描述】:我一直在练习许多OpenCV的教程和示例,主要用于特征检测和提取。我正在使用C++、VisualStudio2012并打开CV2.4.11。我... 查看详情