一、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;
}