您的位置:首页 > 编程语言 > C语言/C++

C++ RGB图片限定最长边进行resize

2017-01-06 19:41 561 查看
1、功能描述:

对于已有图片,限定其最长边在某个值之内(最短边原理一致);

2、IplImage*代码实现:

IplImage *ReadImageToResize(
IplImage*										pSrcImage,	//原图
const int 											l_side) 		//最长边阈值
{
int height ,  width;				//记录原图宽、高
int long_side, short_side;		//记录原图长边、短边
CvSize czSize;					//记录目标图像尺寸
IplImage *pDstImage = NULL;	//声明目标图像,初始化为NULL,一定要初始化!

height = pSrcImage->height;
width  = pSrcImage->width;
if(height > width){				//获取原图长边与短边
long_side = height;
short_side = width;
}else{
long_side = width;
short_side = height;
}

if(long_side <= l_side){			//原图长边在阈值l_side内,则选用原图
pDstImage = cvCloneImage(pSrcImage);
return pDstImage;
}else if(long_side == height){	//确定长边是高还是宽,已确定目标图像宽高
czSize.width  = (int)((l_side*width)/height);
czSize.height = l_side;
}else if(long_side == width){
czSize.width  = l_side;
czSize.height = (int)((l_side*height)/width);
}

pDstImage = cvCreateImage(czSize, pSrcImage->depth, pSrcImage->nChannels);	//获取目标图像尺寸czSize后,为目标图像申请空间
cvResize(pSrcImage, pDstImage, CV_INTER_AREA);

return pDstImage;
}

3、Mat代码实现:

Mat ReadImageToResize( const Mat cv_img_origin, //原图
const int l_side) //最长边阈值
{
Mat cv_img; //声明目标图像
int height , width; //记录原图宽、高
int long_side, short_side; //记录原图长边、短边
height = cv_img_origin.rows; //获取原图宽高
width = cv_img_origin.cols;

if(height > width){ //获取原图长边与短边
long_side = height;
short_side = width;
}else{
long_side = width;
short_side = height;
}

//长宽比过高时可以舍弃该图片
if(long_side/short_side >= 10)
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)));
}

return cv_img;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 图片 opencv