目标检测——CodeBook 算法测试代码
2015-10-09 14:23
260 查看
利用CodeBook算法实现目标检测。
测试代码:
测试效果:
测试代码:
// picturepreprocess.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <fstream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <opencv2/video/background_segm.hpp> #include <opencv2/legacy/legacy.hpp> #include <cvaux.h> using namespace std; using namespace cv; //const int NCHANNELS = 3; //bool ch[NCHANNELS]={true,true,true}; int _tmain(int argc, _TCHAR* argv[]) { //CvScalar p; //ofstream outfile("C:\\Users\\admin\\Desktop\\gray\\gray.txt"); IplImage* rawImage = 0, *yuvImage = 0; IplImage *ImaskCodeBook = 0,*ImaskCodeBookCC = 0; CvCapture* capture = 0; int nframes = 0; int nframesToLearnBG =200;//训练帧数选择 CvBGCodeBookModel* model = 0; model = cvCreateBGCodeBookModel(); //codebook方法参数初始化(选择默认值) model->modMin[0] = 3; model->modMin[1] = model->modMin[2] = 3; model->modMax[0] = 10; model->modMax[1] = model->modMax[2] = 10; model->cbBounds[0] = model->cbBounds[1] = model->cbBounds[2] = 10; bool pause = false; cvNamedWindow( "Raw", 1 ); cvNamedWindow( "Foreground",1); cvNamedWindow( "Foreground_ConnectComp",1); capture =cvCreateFileCapture(".....");//初始化从文件中获取视频 while(rawImage = cvQueryFrame( capture )) { nframes++; if(nframes == 1) { yuvImage = cvCloneImage(rawImage); ImaskCodeBook = cvCreateImage(cvGetSize(rawImage), IPL_DEPTH_8U, 1 ); ImaskCodeBookCC = cvCreateImage(cvGetSize(rawImage), IPL_DEPTH_8U, 1 ); cvSet(ImaskCodeBook,cvScalar(255)); } else { cvCvtColor(rawImage, yuvImage, CV_BGR2YCrCb); if(!pause && nframes-1 < nframesToLearnBG) cvBGCodeBookUpdate( model, yuvImage ); if(nframes-1 == nframesToLearnBG) cvBGCodeBookClearStale( model, model->t/2 ); if( nframes-1 >= nframesToLearnBG){ // 提取前景 cvBGCodeBookDiff(model, yuvImage, ImaskCodeBook);//codebook方法中,背景减除 // 对前景做连通域分割 cvCopy(ImaskCodeBook,ImaskCodeBookCC); cvSegmentFGMask(ImaskCodeBookCC); } cvShowImage("Raw", rawImage); cvShowImage("Foreground",ImaskCodeBook); //查看像素 //for (int i=0;i<ImaskCodeBook->width;i++) //{ //for (int j=0;j<ImaskCodeBook->height;j++) //{ // p=cvGet2D(ImaskCodeBook,j,i); //outfile<<p.val[0]<<""; //} //outfile<<endl; //} cvShowImage("Foreground_ConnectComp",ImaskCodeBookCC); char c=cvWaitKey(30); if(c==27) //按下Esc键退出视频播放 break; } } cvReleaseCapture( &capture ); cvDestroyWindow( "Raw" ); cvDestroyWindow( "Foreground"); cvDestroyWindow( "Foreground_ConnectComp"); }
测试效果:
相关文章推荐
- JAVA中ResourceBundle和Properties类的区别
- Eclipse或MyEclipse的git插件egit
- 10_9 java笔记
- Yii源码阅读笔记 - 请求处理基本流程
- form表单相关代码
- 深入理解abstract class和interface
- Xcode — GitHub 托管项目
- PHP 开发中的外围资源性能分析(一)
- 用python解析html--SGMLParser
- SVN 管理Android项目中eclipse的设置和注意事项
- python 字符串GBK解码
- 如何解决phpmyadmin导入数据库文件最大限制2048KB
- SpringMVC3.X的配置
- 航班动态查询api调用代码示例
- java中Set集合的遍历及实现类比较分析
- 《php和mysql web开发》笔记——第11章 使用MySQL从Web访问数据库
- PHP 二维关联数组去重
- python异常处理
- Java服务者提供者框架
- Java判断两个日期相差天数的方法