visual-c++ - 如何使用 OpenCV 函数 cvSaveImage() 保存多张不同名称的图像?

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

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

最佳答案

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"

关于visual-c++ - 如何使用 OpenCV 函数 cvSaveImage() 保存多张不同名称的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518751/

相关文章:

c++ - 如何在 opencv 中访问 Mat 的第 n 个 channel ?

opencv - opencv 视频上的颜色阈值

python - 如何使用 opencv (python/c++) 从图像中去除模糊

java - 如何在 JNI 中返回一个数组?

c++ - 如何在 C++ 中使用复杂变量数组?

python - 如何在 OpenCV 中进行变形?

python - 当它只是一个字母时,Pytesseract 无法识别

c++ - 在哪里可以找到将 VC++ 内联汇编程序转换为内在函数的脚本?

c - 从C语言的命令窗口读取文件

c++ - `char * const` 字段被 MSVC (VS2015) 视为 "incompatible with C"