【问题标题】:How to save multiple images with different names using OpenCV function cvSaveImage()?如何使用 OpenCV 函数 cvSaveImage() 保存多个不同名称的图像?
【发布时间】:2011-12-27 15:13:55
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: visual-c++ opencv


    【解决方案1】:

    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"
    

    【讨论】:

    • 你能把图片保存到"C:\\d.bmp"吗?我会尝试逐字增加目录名称。在某些目录上,您可能没有写入权限。
    【解决方案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;
    

    }

    【讨论】:

      【解决方案3】:

      看起来您创建的输出文件名错误,请尝试在循环内打印 num 的值。

      或者您可以使用类似的东西创建输出文件 1.bmp、2.bmp 等

      char filename[80];
      
      ..... loop ...
      
      sprintf(filename,"%u.bmp",counter)
      cvSaveImage(filename, imgA);
      

      【讨论】:

      • 看来我们有一个 OpenCV 跟踪者。社区对此表示赞赏。
      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2021-08-04
      相关资源
      最近更新 更多