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

首先,如果您从i = 10and do开始while( i < 10 ),那么您的代码将只保存 9 个项目。现在回答你的问题,

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 回答
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 回答
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 回答