#include "stdafx.h头文件下载" #define max(a,b)(a>b?a:b)

查看: 2078|回复: 11
菜鸟自己写的动态背景下目标检测的程序 求改正
rt 本人新兵 最近在做这个东西 自己根据论坛上一个老师的代码 自己改了改得到了这一段代码
希望有老师能帮我看看 这个代码能编译但是无法运行 不知道错误出在哪里了
错误可能比较多 望大家见谅 新手嘛 注释的很多地方 是我觉得没有什么太大用处的地方// 动态背景目标检测2.cpp : 定义控制台应用程序的入口点。//#include &stdafx.h&#include &cv.h&#include &highgui.h&#include &iostream& //在前一帧图像中设置模板的参数#define H 20 //H,V为设置模板大小的参数,模板的大小为(2*H+1)*(2*V+1)#define V 20 //设置两帧图像的可能的共同区域#define Dx 100 //表示在当前帧中待匹配特征点M(I)可能的范围#define Dy 50 #define K_width 2*Dx+(2*H+1)#define K_height 2*Dy+(2*V+1)//判断匹配是否合适#define X_ABS 20 #define Y_ABS 20#define TEMP_MIN 25 //在前一帧中获得模板并在当前帧中获得匹配点//此处为一子函数CvPoint mapping_point(IplImage *pre_image,int T_Xoffset, int T_Yoffset, int T_width, int T_height,IplImage *cur_image,int ROI_Xoffset,int ROI_Yoffset,int ROI_width,int ROI_height,double *tempdata) {//区域斜杠(/)表示ROI区域,也就是匹配点可能的区域,星号(*)表示模板匹配后的区域//(0,0)| | | | | | | | | | | | | | | | | | | | | // | -----------------------------------------// | -----------------------------------------// | -----------////////////////////----------// | -----------//////******////////----------// | -----------//////******////////----------// | -----------//////******////////---------- // | -----------////////////////////----------// | -----------////////////////////----------// | -----------////////////////////----------// | -----------------------------------------// | -----------------------------------------//------------------------在前一帧中获得模板(templ)---------------------------------cvSetImageROI(pre_image,cvRect(T_Xoffset,T_Yoffset,T_width,T_height));//cvSetImageROI基于给定的矩形设置图像的ROIIplImage *templ=cvCreateImage(cvSize(T_width,T_height),8,1);cvCopy(pre_image,templ);cvResetImageROI(pre_image);//------------------------模板匹配获得匹配点--------------------------------------CvPoint ptmin,double pointmin,cvSetImageROI(cur_image,cvRect(ROI_Xoffset,ROI_Yoffset,ROI_width,ROI_height));//int owidth = ROI_width - T_width + 1;int oheight= ROI_height - T_height + 1;IplImage *resul=cvCreateImage(cvSize(owidth,oheight),32,1);//这里temp1是上面获得的模板cvMatchTemplate(cur_image,templ,resul,CV_TM_SQDIFF_NORMED);//cvMatchTemplate 将模板与重叠的图像区域比较cvMinMaxLoc(resul,&pointmin,&pointmax,&ptmin,&ptmax);//cvMinMaxLoc查找数组元素中的最大值和最小值*tempdata=//cout&&&匹配值:&&&pointmin&&//把ROI区域对应的点映射到源图像中CvPoint ptmin_ptmin_re.x=ROI_Xoffset+ptmin.x;ptmin_re.y=ROI_Yoffset+ptmin.y;cvResetImageROI(cur_image);//释放内存很关键cvReleaseImage(&templ);cvReleaseImage(&resul);return ptmin_}//??????这里是什么?????/*IplImage *Difference_Image(int x_pre,int y_pre,int x_cur,int y_cur,int DIFF_WIDTH,int DIFF_HEIGHT, IplImage *pre_image,IplImage *cur_image) { //获得前一帧中的差分区域cvSetImageROI(pre_image,cvRect(x_pre,y_pre,DIFF_WIDTH,DIFF_HEIGHT));IplImage *pre_diff=cvCreateImage(cvSize(DIFF_WIDTH,DIFF_HEIGHT),8,1);cvCopy(pre_image,pre_diff);cvResetImageROI(pre_image);//与当前帧中的ROI区域进行差分cvSetImageROI(cur_image,cvRect(x_cur,y_cur,DIFF_WIDTH,DIFF_HEIGHT));IplImage* diff=cvCreateImage(cvSize(DIFF_WIDTH,DIFF_HEIGHT),8,1);cvAbsDiff(cur_image,pre_diff,diff);cvResetImageROI(cur_image);//把差分图像显示在当前帧中的ROI区域IplImage *diff_area=cvCreateImage(cvGetSize(cur_image),8,1);cvCopy(cur_image,diff_area);cvSetImageROI(diff_area,cvRect(x_cur,y_cur,DIFF_WIDTH,DIFF_HEIGHT));cvCopy(diff,diff_area);cvResetImageROI(diff_area);//释放内存很关键cvReleaseImage(&pre_diff);cvReleaseImage(&diff);return diff_}*/int main(int argc, _TCHAR* argv[]){& &IplImage* pFrame = NULL; & &IplImage* pFrImg1 = NULL;& &IplImage* pFrImg2 = NULL;& &IplImage* pFrImg1c = NULL;& &IplImage* pFrImg2c = NULL;& &IplImage* result = NULL;& &IplImage* img_temp_pre=NULL;& &IplImage* img_eigen_pre=NULL;& &IplImage* diff=NULL;& &IplImage* tempImg1 = NULL;& && &cvNamedWindow(&video&, 1);& &cvNamedWindow(&diff_out&, 1); & &CvCapture* pCapture = NULL;&&if( !(pCapture = cvCaptureFromFile(&video.avi&)))& & {& && &fprintf(stderr, &Can not open video file %s\n&, argv[1]);& && &return -1;& & }& &while(true)& &{& && &pFrame = cvQueryFrame( pCapture );& & & && & if( pFrame == NULL) & && && &{& && && &&&& && && & }& & & &&&& &&&cvCopy(pFrame,pFrImg1c,NULL);& & & &&&pFrame = cvQueryFrame( pCapture );& & & &&&cvCopy(pFrame,pFrImg2c,NULL); & & & &&&cvCvtColor(pFrImg1c, pFrImg1, CV_BGR2GRAY);& & & &&&cvCvtColor(pFrImg2c, pFrImg2, CV_BGR2GRAY);& & & && && & & && && & & & & & & & //------------------------------角点检测------------------------------------------------------------------------& & & & & & & & // Create temporary images required by cvGoodFeaturesToTrack& & & & & & & & IplImage* img_temp_pre = cvCreateImage(cvGetSize(pFrame), 32, 1); & & & & & & & & IplImage* img_eigen_pre = cvCreateImage(cvGetSize(pFrame), 32, 1); & & & & & & & & // Create the array to store the points detected( &= 1000 )& & & & & & & & int count_pre = 100; & & & & & & & & CvPoint2D32f* corners_pre = new CvPoint2D32f[count_pre]; & & & & & & & & // Find corners& & & & & & & & cvGoodFeaturesToTrack( pFrImg1, img_eigen_pre, img_temp_pre, corners_pre, &count_pre, 0.01, 30);//cvGoodFeaturesToTrack角点检测& & & & & & & & // Mark these corners on the original image & & & & & & & & for(int i=0;i&count_i++) & & & & & & & & { & & & & & & & & if (corners_pre[i].x&H+Dx && corners_pre[i].x&640-H-Dx && corners_pre[i].y&V+Dy && corners_pre[i].y&480-V-Dy)& & & & & & & & cvCircle( pFrImg1, cvPoint(corners_pre[i].x, corners_pre[i].y),4, CV_RGB(255,0,0),-1,8);& & & & & & & & else & & & & & & & & cvCircle( pFrImg1, cvPoint(corners_pre[i].x, corners_pre[i].y),4, CV_RGB(255,255,255),-1,8);& & & & & & & & }& && & & & & & & & printf(&Detected Points : %d\n&, count_pre); // Print the number of corners & & & & & & & & // 寻找出符合条件的角点,并且将其转换为模板的左上角的点I& & & & & & & & CvPoint *I_pre = new CvPoint[count_pre]; & & & & & & & & int s=0;& & & & & & & & for(int i=0;i&count_i++) & & & & & & & & if ( corners_pre[i].x&H+Dx && corners_pre[i].x&640-H-Dx & & & & & & & & && corners_pre[i].y&V+Dy && corners_pre[i].y&480-V-Dy )& & & & & & & & { & & & & & & & & I_pre[s].x=(int)corners_pre[i].x-H;& & & & & & & & I_pre[s].y=(int)corners_pre[i].y-V; //H,V为设置模板大小的参数,模板的大小为(2*H+1)*(2*V+1)& & & & & & & & s++;& & & & & & & & }& & & & & & & & cout&&&符合条件的角点数:&&&s&&& & & & & & & & // 对符合条件的角点特征在当前帧中进行匹配& & & & & & & & CvPoint *I_cur=new CvPoint[s];& & & & & & & && & & & & & & & int I_x,I_y;& & & & & & & & int K_x,K_y;& & & & & & & & for (int i=0;i&s;i++)& & & & & & & & { & & & & & & & & I_x=I_pre[i].x; I_y=I_pre[i].y; & & & & & & & & K_x=I_pre[i].x-Dx; K_y=I_pre[i].y-Dy; //Dx,Dy表示在当前帧中待匹配特征点M(I)可能的范围,& & & & & & & & I_cur[i]=mapping_point( pFrImg1, I_x, I_y, 2*H+1, 2*V+1,& & & & & & & & & & & & pFrImg2, K_x, K_y, K_width, K_height,& & & & & & & & &templatedata);& & & & & & & & }& & & & & & & & // 剔除外点保留内点 & & & & & & & & int *dis = new int[s];& & & & & & & & for (int i=0;i&s;i++)& & & & & & & & {& & & & & & & & dis[i]=abs(I_pre[i].x-I_cur[i].x)+abs(I_pre[i].y-I_cur[i].y);& & & & & & & & cout&&&点&&&i&&&:&&&dis[i]&&& & & & & & & & cvLine( pFrImg2 , I_pre[i], I_cur[i], CV_RGB(255, 0, 0), 2 );//cvLine绘制两点间的连线& & & & & & & & }& & & & & & & & //& & & & & & & & int a=2,b=4,c=8;& & & & & & & & cvCircle( pFrImg1, cvPoint(I_pre[a].x, I_pre[a].y),8, CV_RGB(255,0,0),-1,8);& & & & & & & & cvCircle( pFrImg1, cvPoint(I_pre[b].x, I_pre[b].y),8, CV_RGB(255,0,0),-1,8);& & & & & & & & cvCircle( pFrImg1, cvPoint(I_pre[c].x, I_pre[c].y),8, CV_RGB(255,0,0),-1,8);& & & & & & & & //仿射变换& & & & & & & & CvPoint2D32f *src_tri = new CvPoint2D32f[3];& & & & & & & & CvPoint2D32f *dst_tri = new CvPoint2D32f[3];& & & & & & & & /*定义变换参数矩阵*/& & & & & & & & CvMat * Affine_matrix=cvCreateMat(2,3,CV_32F);& & & & & & & & /*源图像中的3点*/& & & & & & & & src_tri[0]=cvPoint2D32f((float)I_pre[a].x,(float)I_pre[a].y);& & & & & & & & src_tri[1]=cvPoint2D32f((float)I_pre[b].x,(float)I_pre[b].y);& & & & & & & & src_tri[2]=cvPoint2D32f((float)I_pre[c].x,(float)I_pre[c].y);& & & & & & & & /*目标图像中的3点*/& & & & & & & & dst_tri[0]=cvPoint2D32f((float)I_cur[a].x,(float)I_cur[a].y);& & & & & & & & dst_tri[1]=cvPoint2D32f((float)I_cur[b].x,(float)I_cur[b].y);& & & & & & & & dst_tri[2]=cvPoint2D32f((float)I_cur[c].x,(float)I_cur[c].y);& & & & & & & & /*计算仿射矩阵2*3*/& & & & & & & & cvGetAffineTransform(src_tri,dst_tri,Affine_matrix);//cvGetAffineTransform获取仿射矩阵& & & & & & & & /*输出仿射矩阵*/& & & & & & & & /*printf(&仿射矩阵为:\n&); & & & & & & & & for(int i=0;i&2;i++)& & & & & & & & {& & & & & & & & for (int j=0;j&3;j++)& & & & & & & & printf(&%1f &,cvGet2D(Affine_matrix,i,j));& & & & & & & & cout&&& & & & & & & & }& & & & & & & & /*稠密放射变换*/& && & & & & & & & IplImage *pre_trans=cvCloneImage( pFrImg1);/*克隆图像*///cvCloneImage查找指定的对象的类型,然后复制该对象& & & & & & & & pre_trans-&origin=pFrImg1-&& & & & & & & & cvZero(pre_trans);& & & & & & & & cvWarpAffine( pFrImg1,pre_trans,Affine_matrix);//cvWarpAffine对图像进行仿射变换& & & & & & & & IplImage *diff_out=cvCreateImage( cvGetSize( pFrImg1),IPL_DEPTH_8U, 1 );& & & & & & & & cvAbsDiff( pFrImg2,pre_trans,diff_out);& & & & & & & & cvShowImage(&video&,pFrImg1);& & & & & & & & cvShowImage(&diff_out& ,diff_out); & && && &//二值化& && && &/*cvThreshold(reMat, result, 20, 255.0, CV_THRESH_BINARY);& && && &cvPyrDown(result, tempImg1, 7 );//使用gsussian金字塔对输入图像向下采样& && && &cvDilate(result, result, 0, 1);//cvDilate使用任意结构元素膨胀图像& && && &cvPyrUp(tempImg1, result, 7 );& && && && && && &cvDilate(result, result, 0, 1);& && && &cvErode(result, result, 0, 1);& && && &cvPyrDown(result, tempImg1, 7 );& && && &cvPyrUp(tempImg1, result, 7 );& && && &cvDilate(result, result, 0, 1);& && && &cvErode(result, result, 0, 1);*/& && & & && && &if( cvWaitKey( 10 ) &= 0 )& && && && && && &}&&& & & & & & & & // Display it& & & & & & & & cvWaitKey(0); & & & & & & & & cvReleaseImage(& pFrImg1);& & & & & & & & cvReleaseImage(& pFrImg2);& & & & & & & & cvReleaseImage(&img_temp_pre);& & & & & & & & cvReleaseImage(&img_eigen_pre);& & & & & & & & cvReleaseImage(&diff);& & & & & & & & cvDestroyAllWindows();& & & & & & & & return 0 ; }复制代码
菜鸟自己写的动态背景下目标检测的程序 求改正
难道错误太多 没法改吗?谁来看看啊
菜鸟自己写的动态背景下目标检测的程序 求改正
运行没错误提示吗
菜鸟自己写的动态背景下目标检测的程序 求改正
运行没错误提示吗没有啊 就是一闪而过了
编译没有问题的
菜鸟自己写的动态背景下目标检测的程序 求改正
之前运行没有错误提示的 今天一运行有了
runtime error
this&&application has requested the runtime to terminate it in an unusual way
这是什么情况啊
菜鸟自己写的动态背景下目标检测的程序 求改正
程序已经调好了 可以运行了 但是效果很差 不知道哪位老师可以指导一下?
菜鸟自己写的动态背景下目标检测的程序 求改正
这个是动态背景的检测程序??
菜鸟自己写的动态背景下目标检测的程序 求改正
这个是动态背景的检测程序??????
菜鸟自己写的动态背景下目标检测的程序 求改正
请问你的背景是怎么变化的啊?是摄像机发生了移动吗
菜鸟自己写的动态背景下目标检测的程序 求改正
请问你的背景是怎么变化的啊?是摄像机发生了移动吗是的啊 就是一段视频就可以&&&您需要以后才能回答,未注册用户请先。小心!#define max(a,b) a&b?a:b-C语言-第七城市
小心!#define max(a,b) a&b?a:b
今天做oj的时候,定义了两个宏://wrong code#define max_2(a,b) a&b?a:b#define max_3(a,b,c) (a&b?a:b)&c?(a&b?a:b):c然后程序结果总是WA,仔仔细细检查程序的逻辑一遍又一遍,都快抓狂了,最后终于发现是我定义的两个宏有问题。改为如下就AC了:#define max_2(a,b) (a&b?a:b)#define max_3(a,b,c) ((a&b?a:b)&c?(a&b?a:b):c)对的,就是差两个括号,没有括号,因为优先级不一样,造成运算顺序并不是我们预期的那样,运算结果错误。&下边是分析过程:先上两段有问题的代码:#include &iostream&#define max_2(x,y) x&y?x:yusing namespaceint main(){
int a=max_2(1,2)+3;
int b=max_2(2,1)+3;
int c=max_2(1,2);
int d=max_2(2,1);
int e=(max_2(2,1)+3);
cout&&a&&" "&&b&&
cout&&c&&" "&&d&&
return 0;}运行结果:从程序中变量c、d可以发现,max_2(x,y)里不论x、y的顺序如何,max_2(x,y)能够返回正确的结果;从程序中变量a、b可以发现,运算顺序跟max_2(x,y)里x、y的顺序有关,当x&y时,程序先将max_2(2,1)的结果赋给b,而不是加3之后再赋给b;从程序中变量e可以发现,即使加了括号,也不能改变这种运算顺序。&另一段问题代码,如下图,编译都不能通过:&所以,不要忘了关键的括号,不然害人不浅。
无相关信息c语音编程有问,输入a、b、c、d四个整数,求最小值Min和最大值Max。_百度知道
c语音编程有问,输入a、b、c、d四个整数,求最小值Min和最大值Max。
提问者采纳
scanf(&is&main(){&a.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="&nbsp.;&nbsp.hiphotos://g.h&;%d?&);;printf(&}测试结果.com/zhidao/pic/item/71cf3bc79f3df8dc1f634edacd1b;number&&nbsp,d;a:\n&number&int&&nbsp,%d&printf(&&nbsp,%d;&nbsp?&b.jpg" esrc="&c:&nbsp,d))));b)&b)&nbsp,&amp.#define&nbsp,&;input&nbsp.hiphotos:&nbsp://g;,b)&&nbsp,min(c,min(a;&%&quot,min(b;max&nbsp.&((a&lt,c;&&&nbsp,max(c,&;&.com/zhidao/wh%3D600%2C800/sign=019fea6c8a82b43bd854f/71cf3bc79f3df8dc1f634edacd1b;&d);min(a.max(a;&nbsp://g;is&nbsp,b,max(b;&%&min&&nbsp,%d,b)&/zhidao/wh%3D450%2C600/sign=a8d65cd29aa2e/71cf3bc79f3df8dc1f634edacd1b;printf(&quot,d))));((a&The&&&four&&nbsp,&amp:b)#define&a;a#include&lt:<a href=",max(a;numbers&The&nbsp:b)void&nbsp
其他类似问题
按默认排序
其他1条回答
b:d?minmin=a&lt:c;min=min&lt?a;c;min=min&lt?d;b
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 无法打开stdafx.h 的文章

 

随机推荐