opencv中的图像resize函数

1、作用:

在图像处理过程中,有时需要把图像调整到同样大小,便于处理,这时需要用到图像resize()

2、原函数:

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

参数src:输入图像

参数dst:输出图像

参数dsize输出图像的大小。如果为0,则

dsize=Size(round(fxsrc.cols),round(fysrc.rows))

参数fx、fy:沿x轴和y轴的缩放系数。默认取0时,计算如下

fx=(double)dsize.width/src.cols

fy=(double)dsize.height/src.rows

注意:dsize和fx、fy不能同时为0。

参数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>

int main(int argc, char* argv[]){
    std::string path = "";
    int resize_height = 256;
    int resize_width = 256;
    cv::Mat src = cv::imread(path); 
    cv::Mat dst;
    imshow("src", src);
    cv::resize(src, dst, cv::Size(resize_width, resize_height), (0, 0), (0, 0), cv::INTER_LINEAR);
    imshow("dst", dst);

    cv::waitKey(0);
    return 0;
}




fy=(double)dsize.height/src.rows




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值