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的相互转换方法
参考:
CvMat、Mat、IplImage之间的转换详解及实例
参考:
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++
飞机一阵抖动,我终于说出了最后一句再见。