初学图像处理+opencv----跟踪视频中运动物体

视频中用图形框起运动物体

代码拷贝http://blog.csdn.net/u011630458/article/details/45895649,我在其中将圆形框注释掉,换成矩形框。代码如下:

// moving detection.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"




#include <opencv2/opencv.hpp>
#include <iostream>
#include "opencv2/core/core.hpp"                                                                                                     
#include "opencv2/video/background_segm.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/legacy/legacy.hpp"
 
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
using namespace cv;
 
int main(int argc, char** argv){
    Mat frame, fgmask, segm, find_shape;
	vector<vector<Point> > contours;
	vector<Vec4i> hierarchy;
 
    Ptr<BackgroundSubtractorGMG> fgbg = Algorithm::create<BackgroundSubtractorGMG>("BackgroundSubtractor.GMG");
    if (fgbg.empty()){
        std::cerr << "Failed to create BackgroundSubtractor.GMG Algorithm." << std::endl;
        return -1;
    }
 
    fgbg->set("initializationFrames", 20);
    fgbg->set("decisionThreshold", 0.7);
 
    VideoCapture cap;
    cap.open("C:\\Users\\Administrator\\Desktop\\数据\\chuli\\chuli\\car.avi");
    if (!cap.isOpened()){
        std::cerr << "Cannot read video. Try moving video file to sample directory." << std::endl;
        return -1;
    }
    namedWindow("detection", WINDOW_NORMAL);
	for (;;){
		if (!cap.read(frame)){
			break;
		}
 
		(*fgbg)(frame, fgmask);
 
                frame.copyTo(segm);
		IplImage ImaskCodeBook = fgmask;
		cvSegmentFGMask(&ImaskCodeBook);
		fgmask.copyTo(find_shape);
 
		findContours(find_shape, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
		//vector<vector<Point> > contours_poly( contours.size());
		vector<Rect>boundRect(contours.size());
		//vector<Point2f>center( contours.size());
		//vector<float>radius( contours.size());
		for( int i = 0; i < contours.size(); i++){
			boundRect[i]=boundingRect( Mat(contours[i]));
			//approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true);//绘制曲线逼近多边形
			//minEnclosingCircle( contours_poly[i], center[i], radius[i]);//圆形
		}
		for(int i = 0; i< contours.size(); i++ ){
			rectangle(segm,boundRect[i].tl(),boundRect[i].br(), Scalar(255, 0, 0), 2, 8, 0);
			//circle(segm, center[i], (int)radius[i], Scalar(100, 100, 0), 2, 8, 0);	
		}
 
        imshow("detection", segm);
       // imshow("mask", fgmask);
 
        int c = waitKey(30);
        if (c == 'q' || c == 'Q' || (c & 255) == 27)
            break;
    }
 
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值