我正在尝试在visual studio 2008中保存一系列图像,所有图像都带有“Image”的前缀。 唯一的区别因素应该是它们的数量。 例如,如果我要保存10张图像,那么情况应该是
i=1;
while(i<10)
{
cvSaveImage("G:/OpenCV/Results/Imagei.jpg",img2);
i++
//"i" is gonna be different every time
}
所以我需要将整数与字符串连接起来...... 期待着答案......
答案 0 :(得分:5)
c ++方式(pre-c ++ 11)将是:
#include <sstream>
...
ostringstream convert;
convert << "G:/OpenCV/Results/Image" << i << ".jpg";
cvSaveImage(convert.str().c_str(), img2);
i++;
答案 1 :(得分: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之前的编译器。
答案 2 :(得分:1)
首先,如果您从i = 10
开始并执行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) ;
}
答案 3 :(得分:1)
opencv附带cv :: format()[可能只是一个sprintf包装器,但非常方便,imho]
所以,您的示例可能如下所示:
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 );
答案 4 :(得分: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.