请问为啥我这代码运行到一半运行不下去了

问题描述

#include<cv.h>#include<highgui.h>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<cxcore.h>//#defineN500#defineE3.3554//本文用基于T分布的变化监测intmain(){intk,n=1,dif[3][9],m,c[8][2]={{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1}},e[8]={1,0,1,0,1,0,1,0};inti,j;char*a1,*a2,*a3,**b1,**b2,**b3;floats[3],f[3],t[3],sum[240][960];IplImage*fram,*pimg1,*pimg2,*pimg3;//读视频printf("稍微等一会儿n");CvCapture*capture;capture=cvCreateFileCapture("E:\cheliutest.avi");//为了方便将测试视频重命名为test.avifram=cvQueryFrame(capture);cvSaveImage("test1.bmp",fram);/*cvNamedWindow("backgroud1");cvShowImage("backgroud1",fram);cvWaitKey(0);*/pimg1=cvLoadImage("test1.bmp",1);//创建一个同规格的图像用来存储背景图像CvSizesize=cvSize(pimg1->width,pimg1->height);pimg3=cvCreateImage(size,pimg1->depth,3);a3=pimg3->imageData;b3=newchar*[pimg3->height];for(i=0;i<pimg3->height;i++)b3[i]=&a3[i*pimg3->widthStep];int**count;count=newint*[240];for(i=0;i<240;i++)count[i]=newint[320];//初始化//printf("1");for(i=0;i<240;i++)for(j=0;j<320;j++)count[i][j]=0;//printf("1n");for(i=0;i<240;i++)for(j=0;j<960;j++)sum[i][j]=0;//printf("1n");while(n<200)//取前100帧图像用于重建背景{//一维数组变二维b1=newchar*[pimg1->height];a1=pimg1->imageData;for(i=0;i<pimg1->height;i++)b1[i]=&a1[i*pimg1->widthStep];fram=cvQueryFrame(capture);if(!fram)break;cvSaveImage("test2.bmp",fram);pimg2=cvLoadImage("test2.bmp",1);b2=newchar*[pimg2->height];a2=pimg2->imageData;for(i=0;i<pimg2->height;i++)b2[i]=&a2[i*pimg2->widthStep];for(i=0;i<3;i++){s[i]=0;f[i]=0;}//printf("正常1n");for(i=1;i<pimg1->height-1;i++){for(j=1;j<pimg1->width-1;j++){for(k=0;k<8;k++){//选取领域的窗口为3*3对每一个像素点进行T分布变换监测dif[0][k]=unsignedchar(b2[i+c[k][0]][3*(j+c[k][1])])-unsignedchar(b1[i+c[k][0]][3*(j+c[k][1])]);dif[1][k]=unsignedchar(b2[i+c[k][0]][3*(j+c[k][1])+1])-unsignedchar(b1[i+c[k][0]][3*(j+c[k][1])+1]);dif[2][k]=unsignedchar(b2[i+c[k][0]][3*(j+c[k][1])+2])-unsignedchar(b1[i+c[k][0]][3*(j+c[k][1])+2]);f[0]+=dif[0][k];f[1]+=dif[1][k];f[2]+=dif[2][k];}dif[0][8]=unsignedchar(b2[i][3*j])-unsignedchar(b1[i][3*j]);dif[1][8]=unsignedchar(b2[i][3*j+1])-unsignedchar(b1[i][3*j+1]);dif[2][8]=unsignedchar(b2[i][3*j+2])-unsignedchar(b1[i][3*j+2]);f[0]+=dif[0][8];f[1]+=dif[1][8];f[2]+=dif[2][8];f[0]/=9;f[1]/=9;f[2]/=9;for(k=0;k<9;k++){s[0]+=(dif[0][k]-f[0])*(dif[0][k]-f[0]);s[1]+=(dif[1][k]-f[1])*(dif[1][k]-f[1]);s[2]+=(dif[2][k]-f[2])*(dif[2][k]-f[2]);}s[0]/=8;s[1]/=8;s[2]/=8;s[0]=sqrt(s[0]);s[1]=sqrt(s[1]);s[2]=sqrt(s[2]);//计算tt[0]=(3*f[0]/s[0]);t[1]=(3*f[1]/s[1]);t[2]=(3*f[2]/s[2]);if(fabs(t[0])<E&&fabs(t[1])<E&&fabs(t[2])<E)//这里的E是当α=0.001自由度为8时差T分布表所得的置信区间{sum[i][3*j]+=(unsignedchar)b2[i][3*j];sum[i][3*j+1]+=(unsignedchar)b2[i][3*j+1];sum[i][3*j+2]+=(unsignedchar)b2[i][3*j+2];count[i][j]+=1;}//printf("%d",count[i][j]);//printf("%d,%d,%dn",sum[i][3*j],sum[i][3*j+1],sum[i][3*j+2]);}printf("%d,%d,%dn",f[0],f[1],f[2]);//printf("正常0n");}//printf("正常2n");cvReleaseImage(&pimg1);printf("正常2n");pimg1=cvLoadImage("test2.bmp",1);cvReleaseImage(&pimg2);n++;}//printf("%dn",b1[8][22]);for(i=1;i<pimg1->height-1;i++){for(j=1;j<pimg1->width-1;j++){m=count[i][j];//printf("%dzhengvhang%dn",m,j);//m=100;//计算背景图像的像素值if(m!=0){b3[i][3*j]=sum[i][3*j]/m;b3[i][3*j+1]=sum[i][3*j+1]/m;b3[i][3*j+2]=sum[i][3*j+2]/m;/*if(i==2)printf("%f%f%fn",sum[i][3*j],sum[i][3*j+1],sum[i][3*j+2]);printf("%d%d%d%dn",b3[i][3*j],b3[i][3*j+1],b3[i][3*j+2],j);*/}}}cvSaveImage("backgroud1.bmp",pimg3);/*cvNamedWindow("backgroud1");cvShowImage("backgroud1",pimg2);cvWaitKey(0);*///cvSaveImage("test1.bmp",pimg1);cvReleaseImage(&pimg1);cvReleaseImage(&pimg3);delete[]b1;delete[]b2;for(i=0;i<240;i++)delete[]count[i];delete[]count;return0;}

解决方案

解决方案二:
编译没错,但是调试会有unhandledexceptionin。楼主小白,刚接触OPENCV,不要嫌我笨啊
解决方案三:
查了一下说是下标超了,但检查半天没发现哪里超了啊。。。
解决方案四:
调试。如果不好调试。写记事本。先在几个地方加。运行。看看出现在那块区域。再加。

时间: 2024-08-30 19:28:56

请问为啥我这代码运行到一半运行不下去了的相关文章

请问:用java代码怎么运行,停止,重启memcached?

问题描述 请问:用java代码怎么运行,停止,重启memcached? 请问:用java代码怎么运行,停止,重启memcached?谢谢! 解决方案 基本就是几个命令,所以你java调用对应命令就可以了 sudo service memcached stop sudo service memcached start sudo service memcached restart 解决方案二: http://ask.csdn.net/questions/189677 解决方案三: http://bl

线程-请问为什么第二段代码无法正确运行?

问题描述 请问为什么第二段代码无法正确运行? package threadlearning; public class BankThread { public static void main(String[] args) { // TODO Auto-generated method stub ChuHu ch1=new ChuHu(); ChuHu ch2=new ChuHu(); Thread t1=new Thread(ch1,"aaa"); Thread t2=new Thr

hashmap-Java 程序输出不一样,请问为啥

问题描述 Java 程序输出不一样,请问为啥 package learn; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class MapTest2 { public static void main (String[] args){ HashMap map = new HashMap(); int t; for(int i=0; i<args.length;i++){ if(

c++-OpenGL初学,请问我这段代码有错吗?为什么在窗口显示不出来

问题描述 OpenGL初学,请问我这段代码有错吗?为什么在窗口显示不出来 #include #include #include #include #include const GLint screenWidth = 640; const GLint screenHeight = 480; void myInit(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluO

js代码放到浏览器正确运行,放到ready里面不能正确运行

问题描述 js代码放到浏览器正确运行,放到ready里面不能正确运行 function outpic() { var outs = $('.out') for (i=0;i<outs.length;i++){ var inputText = outs[i].innerText; try { $('.out')[i].innerHTML = AnalyticEmotion(inputText); }catch(err) { console.log('x') outpic() } } } outpi

图片-请问:用glassfish,jsp连接数据库,运行时出现错误如图,是什么原因?

问题描述 请问:用glassfish,jsp连接数据库,运行时出现错误如图,是什么原因? 解决方案 jsp 第2行 第77个字符处 解决方案二: jsp页面的第二行,有引用符号错误!

c++-请问下面这段代码的意思:C++ 中的冒号操作符

问题描述 请问下面这段代码的意思:C++ 中的冒号操作符 PaketRouter类里有一个成员: // Map from ssrc to sending rtp module. std::list rtp_modules_ GUARDED_BY(crit_.get());请问下面的函数里冒号是什么意思? bool PacketRouter::TimeToSendPacket(uint32_t ssrc uint16_t sequence_number int64_t capture_timest

请问:用java代码mysql如何加载到memcached中?谢谢!!

问题描述 请问:用java代码mysql如何加载到memcached中?谢谢!! 请问:用java代码mysql如何加载到memcached中?谢谢!! 解决方案 你应该是想java调用数据库等访问mysql获取到数据,然后放入memcached等做缓存.

图片-请问: 用java代码创建excel表格模板,例子如下怎么创建?

问题描述 请问: 用java代码创建excel表格模板,例子如下怎么创建? 解决方案 用poi类,先做好模板,用poi填写 解决方案二: package com.paic.gcc.service.offwork.util; import java.io.OutputStream; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Li