如何使用OpenCV函数cvSaveImage()保存具有不同名称的多个图像?

时间:2011-04-01 20:54:54

标签: visual-c++ opencv

Hy。我想要做的是加载一堆图像,调整大小并将调整大小的图像保存到另一个文件夹。加载图像,我检查,并且工作正常,我唯一的问题是 cvSaveImage 。例如:

char num[350]="C:\\Users\\Alex\Desktop\\pozeTiles\\image";  
char str[10];      
char pmp[10]=".bmp";    
itoa(index, str, 10);                     
strcat(num,str);   
strcat(num,pmp);     

cvNamedWindow("Testimage", HG_AUTOSIZE);    
cvShowImage("Testimage", img);    
IplImage *imgA = resizeImage(img,20,20, true);    
cvSaveImage(num, imgA);    
cvWaitKey(0);    
cvReleaseImage(&img);    
cvDestroyWindow("Testimage");    
index++;

这是在循环中,它不起作用(现在只有1张照片)。如果我将cvSaveImage属性更改为:

 cvSaveImage("d:\\d.bmp", imgA);

它有效。问题是我有多个文件,我无法更改每个文件的名称..所以有人可以帮助我吗?我应该使用什么参数才能使用?

3 个答案:

答案 0 :(得分:2)

cvSaveImage()之前添加类似printf("Saving: %s\n", num);的调试语句。

另外,您没有检查cvSaveImage()的回复。这很糟糕,因为功能可能由于多种原因而失败:

if (!cvSaveImage(num, imgA))
{
    printf("!!! cvSaveImage failed for %s\n", num);
    // break or exit()
}

很可能你正在组装错误的目录路径。我建议你添加的调试会告诉你。让我们一步一步地执行您的代码:

char num[350]="C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpg";  
char str[10];      
char pmp[10]=".bmp";    
itoa(index, str, 10);

strcat(num,str);   
// if num was "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpg"
// right now it should be: "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpgX"
// where X is the index number.

strcat(num,pmp);
// at this point, num will be:
// "C:\\Users\\Alex\Desktop\\pozeTiles\\image.jpgX.bmp"

答案 1 :(得分:2)

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);

,而(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;

}

答案 2 :(得分:1)

看起来你错误地创建了输出文件名,尝试在循环中打印num的值。

或者您可以使用类似

的内容创建输出文件1.bmp,2.bmp等
char filename[80];

..... loop ...

sprintf(filename,"%u.bmp",counter)
cvSaveImage(filename, imgA);