首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检测对象的视频分析[实时]

用于检测对象的视频分析[实时]
EN

Stack Overflow用户
提问于 2014-02-22 18:18:18
回答 3查看 1.9K关注 0票数 0

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

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

我的主要目标是开发一些软件,通过它我可以实时跟踪我屋外的垃圾,并检查谁在倾倒垃圾,以及垃圾是否正在被清理。有可能吗?如有任何想法/建议/建议,欢迎光临。非常感谢!

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

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-02-22 19:11:45

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

您应该有一个由openCV示例提供的“背景减去”示例代码。

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-22 19:22:51

就您对将视频拆分为帧的查询而言,您应该知道视频只不过是几个帧的集合。因此,每当您在openCV中使用VideoCapture capture(videoFilename);时,您都是在从视频中捕获单个帧/图像。

票数 0
EN

Stack Overflow用户

发布于 2014-03-01 03:02:41

在google的opencv和javacv libraries.The的帮助下,它非常简单,逻辑只是简单地从摄像头中抓取帧,继续使用线程,并在两个后续帧之间执行减法。如果两个帧之间有任何变化,它将产生一个白色的pixel.Black像素,表示帧之间没有变化没有运动detected.The完整的实现可以找到at here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21952891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档