Qt之OpenCV高斯背景建模

来源:互联网 发布:淘宝好的油画店铺 编辑:程序博客网 时间:2024/05/07 11:41

一、OpenCV库

Qt之OpenCV库已编译版下载地址:http://download.csdn.net/detail/checkylqy/9699892

也可自己在OpenCV官网下载最新版CMake自己编译:http://opencv.org/


二、高斯背景建模法(MOG大法)

CODE:

/**
  \file OpencvCamera.h

  \author Jack.Li
*/

#ifndef OPENCVCAMERA_H
#define OPENCVCAMERA_H

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/background_segm.hpp>

#include "BaseDialog.h"

class OpencvCamera : public BaseDialog {
public:
    OpencvCamera(QWidget * parent = 0);
    ~OpencvCamera();

    int showImage();
};

--------------------

/**
  \file OpencvCamera.cpp

  \author Jack.Li
*/

#include "OpencvCamera.h"

#include <QString>
#include <QMessageBox>

OpencvCamera::OpencvCamera(QWidget * parent)
    : BaseDialog(parent)
{
}

OpencvCamera::~OpencvCamera()
{
}

int OpencvCamera::showImage()
{
    // Open the video file
    cv::VideoCapture capture(0);
    // check if video successfully opened
    if (!capture.isOpened()) {
        QString text = "Camera isn't Open!";
        QString title = QString(tr("Warning!!!     "));
        QMessageBox::warning(this, title, text);
        return 0;
    }

    // current video frame
    cv::Mat frame;
    // foreground binary image
    cv::Mat foreground;

    cv::namedWindow("Extracted Foreground");
    cv::namedWindow("OpencvCamera");
    // The Mixture of Gaussian object
    cv::Ptr<cv::BackgroundSubtractorMOG2> mog = cv::createBackgroundSubtractorMOG2();
    bool stop(false);
    // for all frames in video
    while (!stop) {
        // read next frame if any
        if (!capture.read(frame))
            break;

        mog->apply(frame, foreground);
        // Complement the image
        cv::threshold(foreground,foreground,128,255,cv::THRESH_BINARY_INV);

        // show current frame
        cv::imshow("OpencvCamera", frame);
        // show foreground
        cv::imshow("Extracted Foreground",foreground);
        // introduce a delay
        // or press key to stop
        if (cv::waitKey(10)>=0)
                stop= true;
    }
    cv::waitKey();
    return 0;
}


0 0