opencv3/C++基于移动对象的轮廓的跟踪

使用opencv提供的背景去除算法(KNN或高斯混合模型GMM)去除背景,然后将获取的目标二值化后通过筛选目标轮廓获得目标位置。

#include<opencv2/opencv.hpp>
using namespace cv;
//基于移动对象的轮廓的跟踪
int main()
{
    Mat frame;
    bool flag = true;
    VideoCapture capture;
    capture.open(0);
    if (!capture.isOpened())
    {
        printf("can not open ......\n");
        return -1;
    }
    namedWindow("mask", WINDOW_AUTOSIZE);
    namedWindow("output", WINDOW_AUTOSIZE); 
    Ptr<BackgroundSubtractor> pKNN = createBackgroundSubtractorKNN();
    //Ptr<BackgroundSubtractor> pMOG2 = createBackgroundSubtractorMOG2();
    while (capture.read(frame))
    {
        Mat KNNMask;
        std::vector<std::vector<Point>>contours;
        pKNN->apply(frame, KNNMask);
        //(*pMOG2).apply(frame, mogMask);
        threshold(KNNMask, KNNMask, 100, 255, THRESH_BINARY);
        Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
        morphologyEx(KNNMask, KNNMask, MORPH_OPEN, kernel, Point(-1,-1));
        findContours(KNNMask, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0,0));
        for (int i = 0; i < contours.size(); i++)
        {
            //轮廓面积
            double area = contourArea(contours[i]);
            //轮廓外接矩阵
            Rect rect = boundingRect(contours[i]);
            if (area < 500 || rect.width < 50 || rect.height < 50) continue;
            rectangle(frame, rect, Scalar(0,255,255),2);
            putText(frame, "Target", Point(rect.x, rect.y), CV_FONT_NORMAL, FONT_HERSHEY_PLAIN, Scalar(0,255,0),2,8);
        }
        imshow("mask",KNNMask);
        imshow("output",frame);
        waitKey(1);
    }
    return 0;
}

这里写图片描述这里写图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
移动侦测是指通过计算机图像处理技术,使用OpenCV库对视频进行处理,以检测视频中的移动目标。在OpenCV中,可以使用一系列的图像处理算法来实现移动侦测功能。 首先,需要对视频帧进行处理,可以使用OpenCV提供的视频捕获函数,获取视频的每一帧图像。然后,可以对每一帧图像进行预处理,如灰度化、高斯模糊等,以提取出图像的重要特征。 接下来,可以使用帧差法来进行移动目标的检测。帧差法是一种简单有效的移动目标检测算法,通过计算相邻帧的差异来判断是否有目标出现。可以使用OpenCV提供的函数,计算当前帧与前一帧之间的差异。 然后,可以根据差异图像的像素值进行阈值处理,将差异图像转换为二值图像,以便后续的目标检测和跟踪。可以使用OpenCV提供的阈值化函数,设定一个适合的阈值,将差异图像进行二值化处理。 最后,可以对二值图像进行轮廓提取,使用OpenCV提供的轮廓检测函数,将二值图像中的目标区域提取出来。可以根据轮廓的形状、大小和位置等特征,判断目标是不是移动目标,并对其进行跟踪或其他后续处理。 需要注意的是,移动侦测算法的准确性和可靠性受到多种因素的影响,如摄像头的质量、环境光线的变化、背景干扰等。在实际应用中,还需要根据具体的场景进行参数的优化和算法改进,以提高移动侦测的效果和性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值