opencv 保存图片操作:sprintf连续保存文件命名的使用

来源:互联网 发布:画图软件手机版 编辑:程序博客网 时间:2024/06/03 19:16

1. cv::Mat 文件转换到 IplImage 

      cv::Mat ImageQr;

       IplImage  qimage =IplImage(ImageQr);

2. 文件保存

       cvSaveImage(”./result.jpg“, &qimage);

~~~~~~~~~~~~~~~~~

int cvSaveImage( const char* filename, const CvArr* image );
filename  文件名。
image        要保存的图像。
           函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。
          对单通道的图像进行保存,也有可能得到新的3通道图像。例如:cvSaveImage("r.bmp",r);把程序中命名为r的单通道图像存储名字为r的bmp格式下图像,得到新图像为3通道。

3. cv::Mat,cvMat和IplImage的相互转换方法 

参考:http://blog.csdn.net/sunlylorn/article/details/7962939

  CvMat、Mat、IplImage之间的转换详解及实例

参考:http://blog.sina.com.cn/s/blog_74a459380101obhm.html


4. 一幅图像不同方法处理后连续保存图片。

方法一:

        tryCount++;
        string ImageBase =”./data/output/qr“;

        string ImageAddres = ImageBase + int2str(tryCount)+".png";
        IplImage  qimage =IplImage(ImageQr);
        cvSaveImage(ImageAddres.data(), &qimage);     //注意 ImageAddres.data()

        cvShowImage("mywindow",frame);

方法二:  sprintf

参考自:Opencv中将视频保存为连续的图片和连续的图片保存为视频

        tryCount++;
        char ImageName[13];
        sprintf(ImageName, "%s%d%s", "./data/output/qr", tryCount, ".jpg");//保存的图片名
        IplImage  qimage =IplImage(ImageQr);
        cvSaveImage(ImageName, &qimage);
        cvShowImage("mywindow",frame);

 ------------------------------------------------------------------------------------------------------------------

sprintf
功能      把格式化的数据写入某个字符串缓冲区。
头文件   stdio.h
原型   int sprintf( char *buffer, const char *format, [ argument] … );
参数列表          

buffer:char型指针,指向将要写入的字符串的缓冲区。

format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:字符串长度(strlen)


相关函数
int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format, [argument] ... );
int _sprintf_s_l(char *buffer,size_t sizeOfBuffer,const char *format,locale_t locale ,[argument] ... );
int swprintf_s(wchar_t *buffer,size_t sizeOfBuffer,constwchar_t *format ,[argument]...);
int _swprintf_s_l(wchar_t *buffer,size_t sizeOfBuffer,const wchar_t *format,locale_t locale ,[argument]…);
template <size_t size>
int sprintf_s(char (&buffer)[size],const char *format, [argument] ... ); //仅存在于C++
template <size_t size>
int swprintf_s(wchar_t (&buffer)[size],const wchar_t *format ,[argument]...); //仅存在于C++



   


1 0
原创粉丝点击