2

フォルダーから画像をロードしようとしていますが、C、OpenCV、VC++ 2008 Express Edition を使用しています。画像はデスクトップ上にあり、Tom.jpg、Flash.jpeg などの名前が付けられています。このフォルダから画像をプログラムに読み込み、画像を 1 つずつ実験して、結果を保存したいと考えています。この実験の .txt ファイルと .txt ファイルの名前は .jpeg ファイルの名前と同じにする必要があります。Tom.jpgで実行された実験データのように、Tom.jpgに保存する必要があり、Flash.jpgはFlash.txtに保存する必要があります。

1つの画像に対して上記の手順(画像の読み込みとそのデータのテキストファイルへの保存)を実行できます。手動で作成したテキスト ファイルからファイル名を読み取った後、10 個の画像を 1 つずつ表示できます。しかし、この場合、異なる写真のすべてのデータが同じテキスト ファイルに保存され、異なるデータ セットを区別することができません。

フォルダーから一度に 1 つの画像を読み込み、必要な実験を行い、データを別の .txt ファイルに保存し、おそらく数千の画像に対して同じことを行う方法を誰かが提案できますか?

4

2 に答える 2

0

これが私が最終的に使用したコードです:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx

いくつか変更を加えました。私はそれに2つの議論を渡しました。異なる画像のデータを同じExcelシートに保存することを選択しましたが、今回は異なるデータセットを区別することができます。画像ファイル名が最初に来て、次にそのデータが続きます

argv [1]は、すべての画像が配置されているディレクトリです。argv [2]は、コードに必要なファイル拡張子です(私の場合はjpg)。

//フォルダをスキャンしてjpeg画像を探す場合

StringCchCopy(szDir, MAX_PATH, argv[1]);          
StringCchCat(szDir, MAX_PATH, TEXT("\\*."));      
StringCchCat(szDir, MAX_PATH, argv[2]);

hFind = FindFirstFile(szDir, &ffd);

do           
   {  
    //Loading the file from the folder and doing processing on it                 
    }    
while (FindNextFile(hFind, &ffd) != 0);
于 2012-11-01T07:45:12.570 に答える
0

少なくともメイン処理用の関数を作成していただければ幸いです。そうでない場合は、そうしてください。次に、イメージのリストを引数として実行可能ファイルに渡し、for ループを使用します。

int main(int argc, char **argv) {
   for (int i = 1; i < argc; ++i) {
      const char* imageName = argv[i];
      process(imageName);
   }
 return EXIT_SUCCESS;
}
于 2012-10-30T21:37:18.670 に答える