OpenCV:resize()重新调整图像大小

48 篇文章 7 订阅

OpenCV中,resize函数用的比较多。

C++: 
void resize(InputArray src, //输入
            OutputArray dst,//输出
            Size dsize, //输出图像的大小
            double fx=0, double fy=0, //fx、fy是沿x轴和y轴的缩放系数                               
            int interpolation=INTER_LINEAR //插值
            )
Python: cv2.resize(src,
                  dsize[, dst[, fx[, fy[, 
                  interpolation ]]]]
                  ) ->dst
C: void cvResize(const CvArr* src, 
                 CvArr* dst,
                 int interpolation=CV_INTER_LINEAR 
                 )
Python: cv.Resize(src, 
                  dst, 
                  interpolation=CV_INTER_LINEAR
                  )-> None
  • dsize表示输出图像的大小,如果为0,则
dsize=Size(round(fx∗src.cols),round(fy∗src.rows))

  • dsize和fx、fy不能同时为0。
  • fx、fy是沿x轴和y轴的缩放系数;默认取0时,计算如下:
fx=(double)dsize.width/src.cols
fy=(double)dsize.height/src.rows
  • 最后一个参数interpolation表示插值方式,有以下几种:
    INTER_NEAREST - 最近邻插值
    INTER_LINEAR - 线性插值(默认)
    INTER_AREA - 区域插值
    INTER_CUBIC - 三次样条插值
    INTER_LANCZOS4 - Lanczos插值

  • INTER_NEAREST最近邻插值:
    目标如下的像素点为对应的最近的原图像的像素点。
    假设原图像大小为(s_height, s_width),目标图像大小为(d_height, d_width),那么高度和宽度的缩放比例为h_ratio = s_height/d_height,w_ratio=s_width/d_width。
    目标图像像素: (x, y)其值等于原图像(x * w_ration, y * h_ration)处的值。

  • INTER_LINEAR 线性插值(默认):
    在使用最近邻插值时,得到的坐标未必是一个整数,
    例如(xw_ration, yh_ration)=(10.5, 20.5),那么可能取得坐标点就有四种(10, 20)、(11, 20)、(10, 21)、(11, 21)。
    双线性插值,会把这四个坐标的像素值加权求和。
    D(x, y) =
    S(j, k) * w1 + S(j+1, k) w2 + S(j+1,k+1) w3 + S(j, K+1) * w4,
    其中w为权值。
    权值大小和计算位置的小数部分有关。

  • CV_INTER_AREA:区域插值:
    区域插值分为3种情况:图像放大时类似于线性插值,图像缩小时可以避免波纹出现。

  • INTER_CUBIC 三次样条插值:
    使用4x4邻域内的像素双3次插值。

  • INTER_LANCZOS4 Lanczos插值
    使用8×8像素邻域的Lanczos插值
  • 示例代码:
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace stdint main(int argc, char* argv[])
{
    string path = "";
    int resize_height = 256;
    int resize_width = 256;
    Mat src = imread(path); //从路径名中读取图片
    Mat dst;
    imshow("src", src);//显示图片
    resize(src, dst, Size(resize_width, resize_height), (0, 0), (0, 0), INTER_LINEAR);//重新调整图像大小
    imshow("dst", dst);
    waitKey(0);
    return 0;
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值