我是靠谱客的博主 鲜艳毛衣,最近开发中收集的这篇文章主要介绍C++ 设定图像最大边长度并原比例压缩图片,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

// read and resize images:filename,图片名称;savepath,保存压缩后的图片路径;l_side设定图片最长边大小;is_rgb,图片是否为彩色;img_num,处理第几张图片
int ReadImageToResize(const string& filename,const string& savepath,
   					 const int l_side, const bool is_rgb, int img_num) {
	cv::Mat cv_img;   //存储压缩后的图片
	//check rgb or gary 
	int cv_read_flag = (is_rgb ? CV_LOAD_IMAGE_COLOR :	CV_LOAD_IMAGE_GRAYSCALE);
	//read image
	cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag);
	if (!cv_img_origin.data) {
		std::cout << "Could not open or find the "<<img_num<<"th file :" << filename <<endl;
		cv_img = cv_img_origin;
	}
	//获取图像的高和宽
	int height = cv_img_origin.rows;
	int width  = cv_img_origin.cols;
	//获取图像最大边长度
	int long_side, short_side;
	if(height > width){
		long_side = height;    //高为长边
		short_side = width;
	}else{
		long_side = width;   //宽为长边
		short_side = height;
	}

	if(long_side/short_side >= 10)  //如果长短边比例超过10:1,丢弃
		return 0;
	
	if ( long_side <= l_side )  //如果长边在设定的阈值内,则不做压缩
		cv_img = cv_img_origin;
	else if (long_side == height ) {  //如果高为长边
		cv::resize(cv_img_origin, cv_img, cv::Size((int)((l_side*width)/height), l_side));
	} else if(long_side == width){   //如果宽为长边
		cv::resize(cv_img_origin, cv_img, cv::Size(l_side, (int)((l_side*height)/width)));
	}

	cv::imwrite(savepath,cv_img);  //保存压缩后的图片
	return 0;
}


 


完整代码下载地址:

图像原比例压缩

最后

以上就是鲜艳毛衣为你收集整理的C++ 设定图像最大边长度并原比例压缩图片的全部内容,希望文章能够帮你解决C++ 设定图像最大边长度并原比例压缩图片所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部