问题描述:
有n幅图,命名分别为Image1.tif,Image2.tif ... ... Imagen.tif
现在要在一个for循环中对每幅图像进行同样的处理,如灰度化,二值化等,需要用到函数如下:
CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));
解决方案:
1)直接用CString构造
CString ImageStr="";
ImageStr.Format("Image%d.tif",j+1);
cvLoadImage(ImageStr, 0);
其中j从1到n-1递增
2)直接定义char数组
char c[15];
sprintf(c1,"Image%d.tlf",j+1 );
cvLoadImage(c, 0);
3)这方法比较多此一举,但是也写在这里,将CString转换为char*再用
CString ImageStr="Image";
ImageStr.Format("Image%d.tif",j+1);
char* str=(char*)ImageStr.GetBuffer(ImageStr.GetLength());
cvLoadImage(str, 0);
转换方法二
CString ImageStr="Image";
ImageStr.Format("Image%d.tif",j+1);
char* str=(LPTSTR)(LPCTSTR)ImageStr;
cvLoadImage(str, 0);
问题拓展:
这样的命名方法,还可以对程序执行过程中自动生成的文件进行命名
有人会采用系统时间进行命名,这样不会造成重复;
当不愿意采用系统时间命名的时候,就可以用上面的方式,命名递增的一个字符串,类似于数码相机自动存储的命名方式。