OpenCV:图像缩放操作resize,pryUp,pryDown

2025-09-26 04:59:15

1、resize()函数:

可以将原图像精确的转化为指定尺寸的目标图像;

格式:

void resize(InputArray src,

OutputArray dst,

Size dsize,

double fx=0,

double fy=0,

int interpolation=INTER_LINEAR );

参数:

dsize:输出图像的大小;

当dsize不为0时,即指定的图像缩放大小;

当dsize为0时,缩放大小为dsize=Size(round(fx*src.cols),round(fy*src.rows))

其中,fx,fy为缩放比例;

【注】:

dsize和fx/fy不能同时为0;

OpenCV:图像缩放操作resize,pryUp,pryDown

2、resize放大图像:

若要放大图像,推荐使用CV_INTER_LINEAR双线性插值;

以王者荣耀logo为例,大小为482*355,进行放大

示例如下:

int main()

{

       Mat img = imread("0.jpg");

       imshow("原始图", img);

       Mat dst = Mat::zeros(428, 512, CV_8UC3); //我要转化为512*512大小的

       resize(img, dst, dst.size());

       imshow("尺寸调整之后", dst);

       waitKey(0);

       return 0;

}

OpenCV:图像缩放操作resize,pryUp,pryDown

3、resize缩小图像:

要缩小图像,一般推荐使用CV_INTER_AREA插值;

程序如下:

int main()

{

       Mat img = imread("0.jpg");

       imshow("原始图", img);

       Mat dst;

       resize(img, dst, Size(),0.5,0.5);//我长宽都变为原来的0.5倍

       imshow("尺寸调整之后", dst);

       waitKey(0);

       waitKey(0);

       return 0;

}

OpenCV:图像缩放操作resize,pryUp,pryDown

4、图像金字塔:

图像金字塔是用来进行图像缩放的,功能和resize一样;

为什么还需要学习它;

因为其在卷积神经网络中会遇到这个名词;

且搞图像的都得学它;

什么是金字塔?

下图所示,

我们将一层层的图像比喻为金字塔,层级越高,则图像尺寸越小,分辨率越低;

两种类型的金字塔:

高斯金字塔:用于下采样,主要的图像金字塔;

拉普拉斯金字塔:用于重建图像,也就是预测残差,对图像最大程度的还原;

比如一副小图像重建为一幅大图像;

上采样和下采样:

上采样:就是图像放大,使用pryUp函数;

下采样:就是图像缩小,使用pryDown函数;

OpenCV:图像缩放操作resize,pryUp,pryDown

5、pryUp上采样:图像放大

格式:

void pyrUp(InputArray src,

 OutputArray dst,

const Size& dstsize=Size());

上采样步骤:

①将图像在每个方向放大为原来的两倍,新增的行和列用0填充;

②使用卷积核与放大的图像卷积,获得新增像素的近似值;

程序如下:

int main()

{

       Mat img = imread("0.jpg");

       imshow("原始图", img);

       Mat dst;

       pyrUp(img, dst, Size(img.cols*2, img.rows*2)); //放大一倍

       imshow("尺寸放大之后", dst);

       waitKey(0);

       return 0;

}

OpenCV:图像缩放操作resize,pryUp,pryDown

6、pryDown下采样:图像缩小

格式:

void pyrDown(InputArray src,

OutputArray dst,

const Size& dstsize=Size()); 

下采样步骤:

①将图像进行高斯内核卷积

②将所有偶数行和列去除

【注】:

上、下采样都存在一个严重的问题,那就是图像变模糊了,因为缩放的过程中发生了信息丢失的问题。要解决这个问题,就得看拉普拉斯金字塔了。

因此,如果缩放还是采用resize函数;

OpenCV:图像缩放操作resize,pryUp,pryDown

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢