Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 检测对象的视频分析[实时]_Opencv_Video_Image Processing_Object Detection - Fatal编程技术网

Opencv 检测对象的视频分析[实时]

Opencv 检测对象的视频分析[实时],opencv,video,image-processing,object-detection,Opencv,Video,Image Processing,Object Detection,我想做视频分析来检测一定时间内的运动。例如,我有一个视频我的车道外我的房子。我想检查一下它是否保持干净。所以,我想检测周围的垃圾,以防被清理。我尝试了很多网站,他们说我必须把视频分成帧,然后对帧进行异或运算,找出物体的运动 我试图找到这方面的示例代码,但找不到相同的代码。所以,如果有人在使用OpenCV/Xuggler/JavaCV/或任何软件和一些代码这一领域有专业知识,请你发帖子,这样我就可以开始了 我的主要目标是开发一些软件,通过这些软件,我可以实时跟踪屋外的垃圾,并检查谁在倾倒垃圾,以及

我想做视频分析来检测一定时间内的运动。例如,我有一个视频我的车道外我的房子。我想检查一下它是否保持干净。所以,我想检测周围的垃圾,以防被清理。我尝试了很多网站,他们说我必须把视频分成帧,然后对帧进行异或运算,找出物体的运动

我试图找到这方面的示例代码,但找不到相同的代码。所以,如果有人在使用OpenCV/Xuggler/JavaCV/或任何软件和一些代码这一领域有专业知识,请你发帖子,这样我就可以开始了

我的主要目标是开发一些软件,通过这些软件,我可以实时跟踪屋外的垃圾,并检查谁在倾倒垃圾,以及垃圾是否正在清理。可能吗?任何想法/建议/建议都将不胜感激。非常感谢

我尝试过OpenCV,但不知道如何将视频分割成帧并在其上应用对象检测


谢谢

这是基于背景减法的技术代码。如果在本例中,车道所在的背景发生任何变化,您将能够检测到它

您应该有openCV示例提供的背景减法示例代码

#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/video/background_segm.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>

#include <iostream>
#include <vector>

using namespace std;
using namespace cv;

int main()
{

    VideoCapture cap;
    bool update_bg_model = true;

    cap.open(0);
    cv::BackgroundSubtractorMOG2 bg;//(100, 3, 0.3, 5);
    bg.set ("nmixtures", 3);
    std::vector < std::vector < cv::Point > >contours;

    cv::namedWindow ("Frame");
    cv::namedWindow ("Background");

    Mat frame, fgmask, fgimg, backgroundImage;

    for(;;)
    {
        cap >> frame;
        bg.operator()(frame, fgimg);
        bg.getBackgroundImage (backgroundImage);
        cv::erode (fgimg, fgimg, cv::Mat ());
        cv::dilate (fgimg, fgimg, cv::Mat ());

        cv::findContours (fgimg, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
        cv::drawContours (frame, contours, -1, cv::Scalar (0, 0, 255), 2);

        cv::imshow ("Frame", frame);
        cv::imshow ("Background", backgroundImage);


        char k = (char)waitKey(30);
        if( k == 27 ) break;

    }

    return 0;
}

就您关于将视频分割为帧的查询而言,您应该知道视频只是几个帧的集合。因此,无论何时使用VideoCapture capturevideoFilename;在openCV中,您从视频中捕获单个帧/图像

借助谷歌的opencv和javacv库,这非常简单。逻辑是使用一个线程连续地从网络摄像头抓取帧,并在两个相同帧之间执行减法。如果两帧之间有任何变化,它将产生一个白色像素。黑色像素表示两帧之间没有变化[未检测到运动]。可以找到完整的实现