概述
// 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++ 设定图像最大边长度并原比例压缩图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复