Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 为什么在opencv中读取avi文件时会出现while循环中断? intmain(intargc,char*argv[]){ 流文件; 文件打开(“Motion.dat”); int frame_number=0; CvCapture*capture=cvCreateFileCapture(“Cricketc1.avi”); CvCapture*capture1=cvCreateFileCapture(“Cricketc1.avi”); IplImage*imgsize=NULL; IplImage*img1=NULL; IplImage*img2=NULL; IplImage*vidFrame=NULL; IplImage*imggray1=NULL; IplImage*imggray2=NULL; IplImage*imggray3=NULL; cvNamedWindow(“视频”,0); cvNamedWindow(“视频1”,0); imgsize=cvQueryFrame(capture1); 断言(imgsize); CvSize sz=cvGetSize(imgsize); cvReleaseCapture(&capture1); imggray1=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray2=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray3=cvCreateImage(sz,IPL_DEPTH_8U,1); while(true){ 帧号++; img1=cvQueryFrame(捕获); 如果(img1->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); img2=cvQueryFrame(捕获); 如果(img2->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); cvAbsDiff(imggray1、imggray2、imggray3); CvScalar sumDiff=cvSum(imggray3); cout_Visual Studio 2010_Opencv - Fatal编程技术网

Visual studio 2010 为什么在opencv中读取avi文件时会出现while循环中断? intmain(intargc,char*argv[]){ 流文件; 文件打开(“Motion.dat”); int frame_number=0; CvCapture*capture=cvCreateFileCapture(“Cricketc1.avi”); CvCapture*capture1=cvCreateFileCapture(“Cricketc1.avi”); IplImage*imgsize=NULL; IplImage*img1=NULL; IplImage*img2=NULL; IplImage*vidFrame=NULL; IplImage*imggray1=NULL; IplImage*imggray2=NULL; IplImage*imggray3=NULL; cvNamedWindow(“视频”,0); cvNamedWindow(“视频1”,0); imgsize=cvQueryFrame(capture1); 断言(imgsize); CvSize sz=cvGetSize(imgsize); cvReleaseCapture(&capture1); imggray1=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray2=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray3=cvCreateImage(sz,IPL_DEPTH_8U,1); while(true){ 帧号++; img1=cvQueryFrame(捕获); 如果(img1->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); img2=cvQueryFrame(捕获); 如果(img2->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); cvAbsDiff(imggray1、imggray2、imggray3); CvScalar sumDiff=cvSum(imggray3); cout

Visual studio 2010 为什么在opencv中读取avi文件时会出现while循环中断? intmain(intargc,char*argv[]){ 流文件; 文件打开(“Motion.dat”); int frame_number=0; CvCapture*capture=cvCreateFileCapture(“Cricketc1.avi”); CvCapture*capture1=cvCreateFileCapture(“Cricketc1.avi”); IplImage*imgsize=NULL; IplImage*img1=NULL; IplImage*img2=NULL; IplImage*vidFrame=NULL; IplImage*imggray1=NULL; IplImage*imggray2=NULL; IplImage*imggray3=NULL; cvNamedWindow(“视频”,0); cvNamedWindow(“视频1”,0); imgsize=cvQueryFrame(capture1); 断言(imgsize); CvSize sz=cvGetSize(imgsize); cvReleaseCapture(&capture1); imggray1=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray2=cvCreateImage(sz,IPL_DEPTH_8U,1); imggray3=cvCreateImage(sz,IPL_DEPTH_8U,1); while(true){ 帧号++; img1=cvQueryFrame(捕获); 如果(img1->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); img2=cvQueryFrame(捕获); 如果(img2->imageData==NULL) 打破 CVT颜色(img1、imggray1、CV_rgb2灰色); cvAbsDiff(imggray1、imggray2、imggray3); CvScalar sumDiff=cvSum(imggray3); cout,visual-studio-2010,opencv,Visual Studio 2010,Opencv,您正在循环中从同一个cvCapture*读取两次图像:img1=cvQueryFrame(capture);和img2=cvQueryFrame(capture);。如果将第二行更改为img2=cvQueryFrame(capture2)它应该可以正常工作。我需要那一行来获取序列中的下一个图像。这样我就可以应用cvAbsDIff()在两个连续的帧之间…!好的,但是请注意,在循环中,您将从capture获取两次帧,但只增加frame\u number一次。增加两次,一切都会正常工作。我编辑了wh

您正在循环中从同一个cvCapture*读取两次图像:
img1=cvQueryFrame(capture);
img2=cvQueryFrame(capture);
。如果将第二行更改为
img2=cvQueryFrame(capture2)
它应该可以正常工作。

我需要那一行来获取序列中的下一个图像。这样我就可以应用cvAbsDIff()在两个连续的帧之间…!好的,但是请注意,在循环中,您将从
capture
获取两次帧,但只增加
frame\u number
一次。增加两次,一切都会正常工作。我编辑了while循环。我希望每个帧都使用
sumDiff
sumDiff
是两个帧之间的差异连续的图像。但在这里它将只计算到625!我应该对代码做什么更改,以便它得到所有1251帧之间的差异?
int main(int argc, char* argv[]) {
ofstream file;
file.open("Motion.dat");
int frame_number = 0;
CvCapture* capture = cvCreateFileCapture("Cricketc1.avi");
CvCapture* capture1 = cvCreateFileCapture("Cricketc1.avi");

IplImage* imgsize  = NULL;
IplImage *img1     = NULL;
IplImage *img2     = NULL;
IplImage *vidFrame = NULL;
IplImage *imggray1 = NULL;
IplImage *imggray2 = NULL;
IplImage *imggray3 = NULL;

cvNamedWindow("Video", 0);
cvNamedWindow("Video1", 0);
imgsize = cvQueryFrame(capture1);
assert(imgsize);
CvSize sz = cvGetSize(imgsize);
cvReleaseCapture(&capture1);
imggray1 = cvCreateImage(sz, IPL_DEPTH_8U, 1);
imggray2 = cvCreateImage(sz, IPL_DEPTH_8U, 1);
imggray3 = cvCreateImage(sz, IPL_DEPTH_8U, 1);

while (true) {
    frame_number++;
    img1 = cvQueryFrame(capture);
    if(img1->imageData == NULL)
        break;
    cvCvtColor(img1, imggray1, CV_RGB2GRAY);

    img2 = cvQueryFrame(capture);
    if(img2->imageData == NULL)
        break;
    cvCvtColor(img1, imggray1, CV_RGB2GRAY);

            cvAbsDiff( imggray1, imggray2, imggray3 );
            CvScalar sumDiff = cvSum (imggray3);
    cout << sunDiff.val[0] << sunDiff.val[1] << sunDiff.val[2] << endl;
    cvWaitKey(40);
}
cvReleaseCapture(&capture);
cvDestroyAllWindows();
file.close();
system("Pause");
return 0;
}