1

番号付きインデックスを使用して一連の画像ファイルを保存する必要があります。文字列ストリームを使用してこれらのファイル名を作成しようとしています。ただし、 stringstream.str() はファイル名を返していないように見えますが、ゴミを返します。

コードは次のとおりです。

std::stringstream filename;
filename << filepath << fileindex << ".png";
bool ret = imwrite(filename.str(),frame, compression_params);
fileindex++;
printf("Wrote %s\n", filename.str());

1回の実行からの出力は次のとおりです。

Wrote ╠±0
Wrote ╠±0
Wrote ╠±0
Wrote ╠±0

別の実行からの出力は次のとおりです。

Wrote ░‗V
Wrote ░‗V
Wrote ░‗V
Wrote ░‗V

助言がありますか?imwrite は opencv 関数であり、ファイルの先頭に [code]using namespace cv;[/code] があります - opencv と std の間に干渉はありますか?

4

2 に答える 2

4

filename.str()オブジェクトを返しstd::stringます。printf直接できません。形式%sには C スタイルの文字列が必要です。これはうまくいくはずです

printf("Wrote %s\n", filename.str().c_str());

いずれにせよ、C++ オブジェクトで C スタイルの関数を使用することが常に最善の方法であるとは限りません。

于 2013-09-24T14:49:00.577 に答える
4

std::stringのようなC スタイルの可変引数関数に非 POD 型のようなものを渡すことはできませんprintf

C++ 出力を使用できます。

std::cout << "Wrote " << filename.str() << '\n';

または、古い学校の奇妙さが好きなら、C スタイルの出力用に C スタイルの文字列を抽出します。

printf("Write %s\n", filename.str().c_str());
于 2013-09-24T14:49:39.210 に答える