1. 程式人生 > >C++中用for迴圈中對多幅影象進行同樣的處理

C++中用for迴圈中對多幅影象進行同樣的處理

問題描述:

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

問題拓展:

這樣的命名方法,還可以對程式執行過程中自動生成的檔案進行命名

有人會採用系統時間進行命名,這樣不會造成重複;

當不願意採用系統時間命名的時候,就可以用上面的方式,命名遞增的一個字串,類似於數碼相機自動儲存的命名方式。