qt+opencv实现敏感区域移动侦测

qt+opencv实现敏感区域移动侦测
上一篇qt +opencv dnn+tensorflow实现敏感区域预警使用起来准确率高,能针对特定的物品侵入进行专门识别,但运行速度不是很快,不能达到实时识别,今天使用移动侦测算法进行了下测试,发现速度相当快,达到了实时检测实时反映的效果。这也是现有的监控系统普遍采用的预警方式,但也有不足,对室外有风时会引发误报,如果在光线稳定的室内,效果是相当好的。
在这里插入图片描述
qt+opencv实现敏感区域移动侦测_第1张图片

qt+opencv实现敏感区域移动侦测_第2张图片

从图上可以看出,打开摄像头后。点移动侦测,进入预警模式,放入手面立即就声音报警了。
移动侦测一般使用的是背景帧差法,有二帧差,三帧差,等算法。
相关详细算法网上一大把,主要算法在页尾贴出。这里重点说一下检测到入侵后报警关联的算法。一般把大于100像素作为取舍点。然后使用qsound进行异步调用。
帧差法速度是相当的快,效果也相当的好,在使用四路同时显示时,还能做到实时检测。
qt+opencv实现敏感区域移动侦测_第3张图片
QT中的主要代码
Mat frame, gray_frame;
Mat BgImg, FrImg_src, FrImg;

Mat BgImg_32, FrImg_src_32, FrImg_32;

bool firstflag = true;
//while (1)
 tz=5;
 Sleep(30);
 while (capture.read(frame))
{
   // capture >> frame;
    if (frame.empty())
        return;

    if (firstflag)
    {
        cvtColor(frame, BgImg, CV_BGR2GRAY);
        BgImg.convertTo(BgImg_32, CV_32FC1);   //BgImg、FrImg、FrImg_src都已经转换为CV_32FC1.
        firstflag = false;

        FrImg_32 = BgImg_32.clone();
        FrImg_src_32 = BgImg_32.clone();
    }
    else
    {
        cvtColor(frame, gray_frame, CV_BGR2GRAY);
        gray_frame.convertTo(gray_frame, CV_32FC1);

        absdiff(gray_frame, BgImg_32, FrImg_src_32);//这是主要的代码将二个mat对比
        threshold(FrImg_src_32, FrImg_32, 50, 255.0, CV_THRESH_BINARY);
        updateBG(gray_frame, BgImg_32, 0.005);

        BgImg_32.convertTo(BgImg, CV_8UC1);
        FrImg_32.convertTo(FrImg, CV_8UC1);
        FrImg_src_32.convertTo(FrImg_src, CV_8UC1);

        drawRect(frame, FrImg);

// imshow(“src”, frame);
// imshow(“back”, BgImg);
// imshow(“force”, FrImg);
// imshow(“forcesrc”, FrImg_src);

你可能感兴趣的:(算法成品化,人工智能,应用解决方案)