Emgu CV4图像处理之运动物体检测16(C#)

本文测试环境:

win10  64位

vistual studio 2019  

Emgu CV 4.6.0

环境配置准备:

1 新增控制台项目,.net framework为4.7.2

2  把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下

3  项目选择x64

4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll  

具体配置参考:
Emgu CV4图像处理之环境搭建1(C#)_zxy2847225301的博客-CSDN博客

本案例是检测视频运动的车辆

代码中的视频可以从这个地址中下载(需要单独复制到浏览器中打开,这样双击打开会报Forbiden的):

https://vd2.bdstatic.com/mda-jjhtuqg81rtcgtqz/sc/mda-jjhtuqg81rtcgtqz.mp4?v_from_s=hkapp-haokan-hnb&auth_key=1668065179-0-0-6a0e695779701a0e25b4e3428e80fe89&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=3379081635&vid=15251757848743272386&abtest=104959_2-105568_2&klogid=3379081635

下载后,把视频的名称修改为:car_run.mp4

想要获取到运动中的车辆,需要比较两帧视频的图片,然后做减法运算

这类比较经典的案例是统计车流量:参考博客如下:

35-运动物体检测1(EmguCV学习)_牛客博客

36-运动物体检测2(EmguCV学习)_牛客博客

我这个是失败品,效果太差了,黑色的车压根就检测不到,后面的就不做了,仅作记录

参考代码如下:

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EmguCVDemo2
{
    class Program
    {
        static void Main(string[] args)
        {
            TrackRunCar("car_run.mp4");
            CvInvoke.WaitKey(0);
            Console.ReadLine();
        }
        /// <summary>
        /// 检测运动物体
        /// </summary>
        private static void TrackRunCar(string videoFile)
        {
            VideoCapture videoCapture = new VideoCapture(videoFile);
            if (!videoCapture.IsOpened)
            {
                Console.WriteLine("视频未打开");
            }
            Mat pic = new Mat();
            Mat bmg = null;
            while (true)
            {
                videoCapture.Read(pic);
                if (pic.IsEmpty)
                {
                    Console.WriteLine("视频帧已经读取完毕");
                    break;
                }
                CvInvoke.Resize(pic, pic, new Size(800, 600));
                CvInvoke.Imshow("raw_pic", pic);
                //转灰度图
                CvInvoke.CvtColor(pic, pic, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
                if (bmg == null)
                {
                    bmg = pic.Clone();
                }
                Mat target = new Mat();
                CvInvoke.Subtract(pic, bmg, target);
                bmg = pic.Clone();
                //高斯滤波
                CvInvoke.GaussianBlur(target, target, new Size(3, 3), 0);
                //二值化
                CvInvoke.Threshold(target, target, 110, 255, Emgu.CV.CvEnum.ThresholdType.Binary);

                Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));

                //腐蚀 
                CvInvoke.Erode(target, target, element, new Point(-1, -1), 1, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar());

                //膨胀
                CvInvoke.Dilate(target, target, element, new Point(-1, -1), 2, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar());

                CvInvoke.Imshow("target", target);
                CvInvoke.WaitKey(20);
                
            }
            Console.WriteLine("RemoveImgBackground方法运行结束");
            
        }

       


    }
}

运行效果如下:

本地摄像头视频流目标检测是一种能够实时监测和识别摄像头视频流中目标物体的技术。摄像头将实时的视频流传输到本地设备上,通过对视频流的处理和分析,可以检测出视频中的目标物体。 目标检测是计算机视觉领域的一个重要研究方向,其目的是从图像或视频中找出感兴趣的目标物体,并对其进行识别和定位。本地摄像头视频流目标检测主要由以下几个步骤组成: 1. 视频流采集和传输:本地摄像头捕捉到的视频流会经过采集和传输,传输到本地设备上进行接下来的处理。 2. 视频流预处理:对视频流进行预处理,包括图像增强、噪声去除、分辨率调整等。预处理有助于提高目标检测的准确性和效果。 3. 目标检测算法运行:在经过预处理后的视频流上,运行目标检测算法。目标检测算法可以根据不同的需求选择,例如基于深度学习的目标检测模型如YOLO、Faster R-CNN等。算法会对每一帧图像进行分析,找出图像中的目标物体并标注出来。 4. 目标识别和定位:通过目标检测算法找到的目标物体,进行进一步的识别和定位。识别可以根据需求选择不同的分类器或者模型,如卷积神经网络。定位则可以通过目标物体的边界框来完成。 5. 目标跟踪和应用:对于视频流中连续的帧图像,可以使用目标跟踪算法来追踪目标的运动轨迹。通过目标检测和跟踪,可以应用于很多领域,如视频监控、智能交通系统、人脸识别等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值