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);
它有效。问题是我有多个文件,我无法更改每个文件的名称..所以有人可以帮助我吗?我应该使用什么参数才能使用?
答案 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);