2012-04-01 104 views
-1

我试图从视频文件保存图像,但它无法保存我的硬盘驱动器中的任何图像。我编译了以下程序,没有错误。使用OpenCV无法保存图像

#include <stdio.h> 
#include <stdlib.h> 
#include <cv.h> 
#include <cxcore.h> 
#include <highgui.h> 

int main(int argc, char* argv[]) { 

    int c=1; 
    IplImage* img=0; 
    IplImage* small; 
    IplImage* small=new IplImage(inputArray); 
    char buffer[1000]; 
    CvCapture* cv_cap=cvCaptureFromFile("test.avi"); 
    cvNamedWindow("Video",CV_WINDOW_AUTOSIZE); 
    while(1) { 

     img=cvQueryFrame(cv_cap); 
     cvShowImage("Video",img); 
     small = cvCreateImage(cvSize(img->width/2,img->height/2), 8, 3); 
     sprintf(buffer,"C:/image%u.jpg",c); 


     c++; 
     if (cvWaitKey(100)== 27) break; 
    } 

    cvDestroyWindow("Video"); 
    return 0; 
} 

我使用的是2.3.1 OpenCV库和Visual Studio 2010 我如何保存图像从一个视频文件?


我自己也尝试这个代码,上面的程序代码是什么wrong.please看到下面的程序code.After我添加以下代码,也出现了同样的问题。

cvSaveImage(buffer,img); 

修正程序下显示。请到看到这一点,告诉我,我所做的wrong.but没有编译error.after我运行程序它不保存任何图像。

#include"stdafx.h" 
    #include<cv.h> 
    #include<highgui.h> 
    #include<cxcore.h> 


    int main(int argc, char* argv[]) { 

    int c=1; 
    IplImage* img=0; 
    char buffer[1000]; 
    CvCapture* cv_cap=cvCaptureFromCAM(-1); 
    cvNamedWindow("Video",CV_WINDOW_AUTOSIZE); 
    while(1) { 

    img=cvQueryFrame(cv_cap); 
    cvShowImage("Video",img); 
    sprintf(buffer,"D:/image%u.jpg",c); 
    cvSaveImage(buffer,img); 
    c++; 
    if (cvWaitKey(100)== 27) break; 
    } 

    cvDestroyWindow("Video"); 
    return 0; 
    } 

你能告诉我如何保存图像。上面的程序不保存任何图像。请给我你的建议。谢谢。

+1

在这段代码是你想救它?看起来你没有对包含文件名的'buffer'做任何事情。 – WeaselFox 2012-04-01 08:04:49

+1

另外,如果您使用C++,为什么要使用旧的C接口? – etarion 2012-04-01 09:39:42

+1

可能重复的[不保存任何图像..当保存视频帧](http://stackoverflow.com/questions/9966600/doesnt-save-any-image-when-saving-frames-of-a -video) – karlphillip 2012-04-01 20:12:40

回答

0

你忘了真正保存图像:

cvSaveImage(buffer ,img); 

此外,以下是多余的:

IplImage* small; // <-- you don't need this 
IplImage* small=new IplImage(inputArray); 
+0

我是新的openCV,我也加上了上面的代码..但仍然有同样的问题。请参见我下面更正的程序。 ..谢谢你的帮助.. – NimPointer 2012-04-01 16:23:56

+0

@NimPointer现在是时候接受答案了 – Eregrith 2012-04-16 12:47:10

0

不知道,如果你解决了这个问题,或者没有。如果没有,你可以使用imwrite(“test.jpg”,img);保存图像,

这里是一个示例 - 而(1){

img=cvQueryFrame(cv_cap); 
    cvShowImage("Video",img); 
    imwrite("test.jpg",img); 
}