C++ RGB图片限定最长边进行resize
2017-01-06 19:41
561 查看
1、功能描述:
对于已有图片,限定其最长边在某个值之内(最短边原理一致);
2、IplImage*代码实现:
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;
}
对于已有图片,限定其最长边在某个值之内(最短边原理一致);
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;
}
相关文章推荐
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- java对图片进行压缩和resize缩放的方法
- c++ 读取图片RGB
- 对图片上的网格纹进行处理(jpg格式),OpenCV2.4.9,C++,FFT
- 使用MATLAB对数据进行位操作以及RGB图片显示
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- C++ RGB图片垂直翻转
- C++ RGB图片水平翻转
- java对图片进行压缩和resize
- C++ RGB图片色阶调整(Ubuntu)
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- c++ opencv读取图片像素值并进行加密
- C++ RGB图片亮度调整
- py-faster-rcnn中demo.py代码与C++版本的代码对比: part03 处理图片:减掉平均值, resize
- 创建新的C++工程来调用Caffe对图片进行识别
- c++对文件进行操作之读取文件夹下面的图片名称
- C++ 将一幅图片进行等分
- C++ RGB图片对比度调整
- android ImageView 视屏幕情况 使图片在限定范围内进行缩放显示