6

C ++でVS 2010を使用し、これをforループに入れようとしました

String filename = "cropped_" + (ct+1);
imwrite(filename + ".jpg", img_cropped);

これらは出てきたファイル名です:

ropped_.jpg
opped_.jpg
pped_.jpg

どうすればいいのですか?また、ソース コードと同じディレクトリ内のフォルダーにそれらを配置するにはどうすればよいですか?

4

4 に答える 4

12

std::stringstream順次ファイル名を作成するために使用できます。

まずsstream、C++標準ライブラリのヘッダーを含めます。

#include<sstream>

using namespace std;

次に、コード内で次のことを実行できます。

stringstream ss;

string name = "cropped_";
string type = ".jpg";

ss<<name<<(ct + 1)<<type;

string filename = ss.str();
ss.str("");

imwrite(filename, img_cropped);

新しいフォルダを作成するには、次mkdirsystem関数でWindowsのコマンドを使用できますstdlib.h

 string folderName = "cropped";
 string folderCreateCommand = "mkdir " + folderName;

 system(folderCreateCommand.c_str());

 ss<<folderName<<"/"<<name<<(ct + 1)<<type;

 string fullPath = ss.str();
 ss.str("");

 imwrite(fullPath, img_cropped);
于 2013-01-31T06:57:19.310 に答える
3
    for (int ct = 0; ct < img_SIZE ; ct++){
    char filename[100];
    char f_id[3];       //store int to char*
    strcpy(filename, "cropped_"); 
    itoa(ct, f_id, 10);
    strcat(filename, f_id);
    strcat(filename, ".jpg");

    imwrite(filename, img_cropped); }

ちなみに、これは@ sgar91の回答のより長いバージョンです

于 2013-01-31T07:04:22.913 に答える
2

これを試して:

char file_name[100];
sprintf(file_name, "cropped%d.jpg", ct + 1);
imwrite(file_name, img_cropped);

コードを実行するディレクトリに配置する必要があります。そうでない場合は、次のように手動で指定する必要があります。

sprintf(file_name, "C:\path\to\source\code\cropped%d.jpg", ct + 1);
于 2013-01-31T04:54:41.897 に答える