OpenCV学习12

检测运动物体

//
//  main.cpp
//  Study12
//
//  Created by Sean on 16/2/27.
//  Copyright © 2016年 Sean. All rights reserved.
//

#include <iostream>
#include "highgui.h"

using namespace std;

int main(int argc, const char * argv[]) {
    // insert code here...
    cout << "Project Start..."<<endl;
    CvCapture* capture= cvCreateCameraCapture(0);
    IplImage* img = cvQueryFrame(capture);
    IplImage* b_img = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    IplImage* c_img = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
    cvCvtColor(img,b_img,CV_BGR2GRAY);
    cvNamedWindow("Example12");
    while(1)
    {
        if(cvWaitKey(33)==27)
            break;
        img = cvQueryFrame(capture);
        cvCvtColor(img, c_img, CV_BGR2GRAY);
        cvCmp(b_img, c_img, c_img, CV_CMP_LT);
        double pre =1-cvAvg(c_img).val[0]/255;
        cout<<100*pre<<"%"<<endl;
        cvShowImage("Example12", c_img);
    }
    cvReleaseCapture(&capture);
    cvDestroyAllWindows();
    return 0;
}


首先从摄像头读取一帧数据,用于对后面的画面进行对比,对比出来的结果成为一张二值图像(仅image data发生改变,及0&255,而不是0&1),对白值进行统计,算出相似概率,也可设置概率阈值来判断动作。需要注意的是cvCmp只适用于灰度图像,使用前务必将彩色图像变为灰度图像,当然,也可以分离RGB三通道,分别进行检测,就能实现颜色、动作检测,但具体的误差方程我没想出来,不知道怎么处理这RGB三层的阈值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值