4

Visual Studio 2008 で一連の画像を保存しようとしていますが、すべて「画像」というプレフィックスが付いています。唯一の差別化要因はその数です。たとえば、10 枚の画像を保存する場合、状況は次のようになります。

i=1;
while(i<10)
{
cvSaveImage("G:/OpenCV/Results/Imagei.jpg",img2);
i++
//"i" is gonna be different every time
}

そのため、整数と文字列を連結する必要があります...答えを楽しみにしています...

4

5 に答える 5

5

C++ の方法 (c++11 より前) は次のようになります。

#include <sstream>
...
ostringstream convert;
convert << "G:/OpenCV/Results/Image" << i << ".jpg";
cvSaveImage(convert.str().c_str(), img2);
i++;
于 2013-03-11T12:07:43.290 に答える
3

C++11 の場合:

#include <string>

string filename = "G:/OpenCV/Results/Image" + to_string(i) + ".jpg";
cvSaveImage(filename.c_str(), img2);

編集

文字列を構築する一般的でおそらくより効率的な方法は、 を使用することstringstreamです。

ostringstream ss;

ss << "G:/OpenCV/Results/Image" << i << ".jpg";

string filename = ss.str();
cvSaveImage(filename.c_str(), img2);

これは、C++11 より前のコンパイラでも機能します。

于 2013-03-11T12:43:45.283 に答える
1

opencv には cv::format() が付属しています [これはおそらく単なる sprintf ラッパーですが、非常に便利です]

したがって、例は次のようになります。

cv::imwrite( cv::format( "G:/OpenCV/Results/Image%d.jpg", i ), img );

または、時代遅れの 1.0 API をどうしても使用したい場合は、次のようにします。

cvSaveImage( cv::format( "G:/OpenCV/Results/Image%d.jpg", i ).c_str(), img );
于 2013-03-11T22:22:38.883 に答える
1

まず、最初に を実行すると、コードは 9 項目しか保存i = 10しません。while( i < 10 )さて、あなたの質問に、

for( i = 1; i < 11; i++ )
{
  std::stringstream imagenum;
  imagenum << "G:/OpenCV/Results/Image" << i << ".jpg" ;
  cvSaveImage(imagenum.str().c_str(), img2) ;
}

example_link をチェック

于 2013-03-11T12:23:23.723 に答える
0
string imgname="./Image_";
char cbuff[20];
sprintf (cbuff, "%03d", i);
imgname.append(cbuff);
imgname.append(".jpg");

出力:

./Image_001.jpg
./Image_002.jpg
./Image_010.jpg etc.
于 2013-03-11T12:14:17.690 に答える