OpenCv中cvSaveImage保存多张图片
2017-04-09 08:52
453 查看
众所周知,OpenCv中的cvSaveImage函数可以进行图片的保存,其函数源码定义如下:
/* save image to file */
CVAPI(int) cvSaveImage( const char* filename, const CvArr* image,const int* params CV_DEFAULT(0) );
可以看到cvSaveImage函数有三个参数,第一个为要保存的文件名,第二个为要保存的图片,第三个为保存的图片的另外附加属性。
由于本人在毕设的课题中要对一幅图片进行剪切之后,并保存剪切之后的图片,所以要使用cvSaveImage来保存多张图,所以,问题就来了,该如何使用cvSaveImage函数进行多张图片的保存呢?接下来就让我们用程序来测试一下吧!
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
测试结果如下图所示:
1.原图
2.结果图
另外,cvSaveImage函数还有第三个参数,那么第三个参数有什么用呢?那么,再做一个测试吧~
该博客有讲解有关于第三个参数http://www.cnblogs.com/wolfplan/p/4058851.html的相关用法,那么接下来就进行验证吧。
测试代码如下:#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#define CV_IMWRITE_JPEG_QUALITY 1
#define CV_IMWRITE_PNG_COMPRESSION 16
#define CV_IMWRITE_PXM_BINARY 32
int main(int argc, char* argv[])
{
int p[3];
IplImage *img = cvLoadImage("E:\\test.jpg");
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 10;
p[2] = 0;
cvSaveImage("out1.jpg", img, p);
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out2.jpg", img, p);
p[0] = CV_IMWRITE_PNG_COMPRESSION;
p[1] = 100;
p[2] = 0;
cvSaveImage("out3.jpg",img,p);
p[0] = CV_IMWRITE_PXM_BINARY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out4.jpg", img, p);
return 0;
}对比测试结果,原图大小为289KB,out1大小为4.55KB,out2大小为42.8KB,out3大小为27.5KB,out4大小为27.5KB,由此可见仅有第二个即p[1]改变图片的大小,另外一个参数并不会改变图片的大小。最后点击打开链接中指出,p[1]即quality的取值范围为0-100,而默认的值为95.
由于本人刚开始接触OpenCv,所以有些东西了解的并不是很深,如果有错误的地方,欢迎指正。
/* save image to file */
CVAPI(int) cvSaveImage( const char* filename, const CvArr* image,const int* params CV_DEFAULT(0) );
可以看到cvSaveImage函数有三个参数,第一个为要保存的文件名,第二个为要保存的图片,第三个为保存的图片的另外附加属性。
由于本人在毕设的课题中要对一幅图片进行剪切之后,并保存剪切之后的图片,所以要使用cvSaveImage来保存多张图,所以,问题就来了,该如何使用cvSaveImage函数进行多张图片的保存呢?接下来就让我们用程序来测试一下吧!
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
int main(int argc, char* argv[]) { IplImage* imgSrc = cvLoadImage("E:\\a.png", CV_LOAD_IMAGE_COLOR); IplImage* img_gray = cvCreateImage(cvGetSize(imgSrc), IPL_DEPTH_8U, 1);//对图片进行灰度化 cvCvtColor(imgSrc, img_gray, CV_BGR2GRAY); cvThreshold(img_gray, img_gray, 100, 255, CV_THRESH_BINARY_INV);//对图片进行二值化 cvShowImage("ThresholdImg", img_gray); CvSeq* contours = NULL; CvMemStorage* storage = cvCreateMemStorage(0); int count = cvFindContours(img_gray, storage, &contours, sizeof(CvContour), CV_RETR_EXTERNAL);//统计轮廓个数 printf("轮廓个数:%d", count); int idx = 0; char szName[56] = { 0 }; int tempCount = 0; for (CvSeq* c = contours; c != NULL; c = c->h_next) { CvRect rc = cvBoundingRect(c, 0); cvDrawRect(imgSrc, cvPoint(rc.x, rc.y), cvPoint(rc.x + rc.width, rc.y + rc.height), CV_RGB(255, 0, 0)); IplImage* imgNo = cvCreateImage(cvSize(rc.width, rc.height), IPL_DEPTH_8U, 3); cvSetImageROI(imgSrc, rc); cvCopyImage(imgSrc, imgNo); cvResetImageROI(imgSrc); sprintf(szName, "E:\\%d.jpg", idx++);//设置保存路径 cvNamedWindow(szName); cvShowImage(szName, imgNo); cvSaveImage(szName,imgNo);//保存图片 cvReleaseImage(&imgNo); } cvNamedWindow("src"); cvShowImage("src", imgSrc); cvWaitKey(0); cvReleaseMemStorage(&storage); cvReleaseImage(&imgSrc); cvReleaseImage(&img_gray); cvDestroyAllWindows(); return 0; }
测试结果如下图所示:
1.原图
2.结果图
另外,cvSaveImage函数还有第三个参数,那么第三个参数有什么用呢?那么,再做一个测试吧~
该博客有讲解有关于第三个参数http://www.cnblogs.com/wolfplan/p/4058851.html的相关用法,那么接下来就进行验证吧。
测试代码如下:#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#define CV_IMWRITE_JPEG_QUALITY 1
#define CV_IMWRITE_PNG_COMPRESSION 16
#define CV_IMWRITE_PXM_BINARY 32
int main(int argc, char* argv[])
{
int p[3];
IplImage *img = cvLoadImage("E:\\test.jpg");
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 10;
p[2] = 0;
cvSaveImage("out1.jpg", img, p);
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out2.jpg", img, p);
p[0] = CV_IMWRITE_PNG_COMPRESSION;
p[1] = 100;
p[2] = 0;
cvSaveImage("out3.jpg",img,p);
p[0] = CV_IMWRITE_PXM_BINARY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out4.jpg", img, p);
return 0;
}对比测试结果,原图大小为289KB,out1大小为4.55KB,out2大小为42.8KB,out3大小为27.5KB,out4大小为27.5KB,由此可见仅有第二个即p[1]改变图片的大小,另外一个参数并不会改变图片的大小。最后点击打开链接中指出,p[1]即quality的取值范围为0-100,而默认的值为95.
由于本人刚开始接触OpenCv,所以有些东西了解的并不是很深,如果有错误的地方,欢迎指正。
相关文章推荐
- opencv中cvCreateImage大图片时出错
- wx.saveImageToPhotosAlbum将图片保存到本地
- OpenCV cv::mat 保存四通道图片 参数
- opencv里的cvSaveImage
- 【OpenCV】中cvCreateImage、cvSaveImage、cvReleaseImage
- c# GDI+ Image.Save()或者Bitmap.Save()方法保存高质量图片
- 【练习5.6】漫水填充法、阈值化、cvSaveImage保存格式
- 关于OpenCV中的cvSaveImage()函数
- 微信小程序保存网络图片的方式2:downfile+saveImageToPhotosAlbum
- Save vtkImageData to BMP Image 保存vtkImageData为图片
- Monotouch Save Image To Application(保存相册图片到你的应用程序)
- opencv中cvSaveImage的问题
- 微信小程序保存网络图片的方式1:getimageinfo+saveImageToPhotosAlbum
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- sap 文档连接更改(不能保存) note_879519:CV115_DOC_SAVE_BUFFER
- iOS中如何将图片文件转为OpenCV中的cv::Mat
- opencv保存图片流程
- opencv保存图片
- android 将图片内容解析成字节数组,将字节数组转换为ImageView可调用的Bitmap对象,图片缩放,把字节数组保存为一个文件,把Bitmap转Byte
- Opencv中将视频保存为连续的图片和连续的图片保存为视频