C ++でVS 2010を使用し、これをforループに入れようとしました
String filename = "cropped_" + (ct+1);
imwrite(filename + ".jpg", img_cropped);
これらは出てきたファイル名です:
ropped_.jpg
opped_.jpg
pped_.jpg
どうすればいいのですか?また、ソース コードと同じディレクトリ内のフォルダーにそれらを配置するにはどうすればよいですか?
C ++でVS 2010を使用し、これをforループに入れようとしました
String filename = "cropped_" + (ct+1);
imwrite(filename + ".jpg", img_cropped);
これらは出てきたファイル名です:
ropped_.jpg
opped_.jpg
pped_.jpg
どうすればいいのですか?また、ソース コードと同じディレクトリ内のフォルダーにそれらを配置するにはどうすればよいですか?
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);
新しいフォルダを作成するには、次mkdir
のsystem
関数で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);
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の回答のより長いバージョンです
これを試して:
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);