OPENCV入门教程八:resize改变图像尺寸

一、目标

学习使用resize函数改变图像的尺寸。

二、函数说明

函数原型:

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

src源图像
dst目标图像
dsize目标图像的大小
各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation(内插)控制;
fx,fy分别指水平和垂直方向的比率;如果dsize 为零,则目标图像的大小是通过这两个参数来计算的:目标图像的宽度为原图像的宽度*fx,同理目标图像的高度为原图像的高度*fy;
如果dsize不为零,fx,fy会自动计算:
fx=dsize.width/src.cols;
fy=dsize.height/src.rows;
因此dsize和(fx,fy)只需设置其中一个,另外一个置为零就可以了。

interpolation取值:
INTER_NN - 最近邻插值。
INTER_LINEAR - 双线性插值 (缺省使用)。
INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。
INTER_CUBIC - 立方插值。

三、程序代码

#include "cv.h"                             //  OpenCV 文件头
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址

    Mat src_img = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据
    if (src_img.empty())
        return -1;
    namedWindow("image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
    imshow("image", src_img);
    Mat dst_img1;
    Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type());

    // 双线性插值
    resize(src_img, dst_img1, Size(), 0.5, 0.5);
    // 立方插值
    resize(src_img, dst_img2, dst_img2.size(), INTER_CUBIC);

    namedWindow("resize image1", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
    namedWindow("resize image2", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
    imshow("resize image1", dst_img1);
    imshow("resize image2", dst_img2);
    waitKey(0);
}

四、解释

1、双线性插值

resize(src_img, dst_img1, Size(), 0.5, 0.5);

第一个参数为原图片
第二个参数为目的图片
第三个参数为图像大小
第四个参数为fx指水平方向的比率
第五个参数为fy指垂直方向的比率

2、立方插值

Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type());
resize(src_img, dst_img2, dst_img2.size(), INTER_CUBIC);

resize第一个参数为原图片
第二个参数为目的图片
第三个参数为图像大小
第四个参数为插值类型
Mat dst_img2从新定义一个图像矩阵

五、结果

这里写图片描述

六、注意

正确的配置opencv
正确使用resize()函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值