opencv实现图像的JPEG质量等级压缩

代码实现

  • 强调一下:主要是用到了cv::imencodecv::imdecode两个函数,具体的用法与cv::imreadcv::imwrite类似。
  • 可参考opencv的相应API文档帮助理解:Image file reading and writing
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

void Jpegcompress(const cv::Mat& src, cv::Mat& dest, int quality)
{
	std::vector<uchar> buff;
	std::vector<int> params;
	/*IMWRITE_JPEG_QUALITY For JPEG, it can be a quality from 0 to 100 
	(the higher is the better). Default value is 95 */
	params.push_back(cv::IMWRITE_JPEG_QUALITY);
	params.push_back(quality);
	//将图像压缩编码到缓冲流区域
	cv::imencode(".jpg", src, buff, params);
	//将压缩后的缓冲流内容解码为Mat,进行后续的处理
	dest = cv::imdecode(buff, -1);
	cv::imshow("src", src);
	cv::imshow("dst", dest);
}

int main()
{
	std::string fileName = "test.jpg";
	cv::Mat src = cv::imread(fileName, -1);
	if (src.empty())
	{
		std::cerr<<" image open error!\n";
		return 0;
	}
	cv::Mat dest;
	//质量等级为设为50
	Jpegcompress(src,dest,50);
	cvWaitKey(0);
	return 0;
}

参考文献

发布了47 篇原创文章 · 获赞 64 · 访问量 27万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览