1、resize()函数

最简单的图像变换就是调整图像大小。resize()函数用于调整图像的大小。 根据输入的图像和尺寸,生成所需尺寸的新图像。

void cv::resize(

cv::InputArray src,

cv::OutputArray dst,

cv::Size dsize,

double fx = 0, e

double fy = 0,

int interpolation = CV::INTER_LINEAR

);

可以用两种方式指定输出图像的大小。 一种方法是使用绝对尺寸; 在这种情况下,dsize参数直接设置结果图像dst的大小。 另一种选择是使用相对大小; 在这种情况下,将dsize设置为Size(0,0),并将fx和fy分别设置为想要应用于x和y轴的比例因子。最后一个参数是插值方法,其默认为线性插值。其他可用选项如表1所示。

表1 cv::resize()插值选项

cv::INTER_NEAREST cv::INTER_LINEAR cv::INTER_AREA
cv::INTER_CUBIC cv::INTER_LANCZOS4

默认插值方法是双线性插值,但可以选择其他方法。最简单的方法是从源图像中最接近的像素处获取已调整大小的像素值; 这时选择插值INTER_NEAREST。或者,可以根据它们与目标像素的接近程度,对2×2邻域的源像素值进行线性加权,这就是INTER_LINEAR所做的。也可以将新的,重新调整大小的像素放置在旧像素上,然后对INTER_AREA中的像素值进行平均。对于更平滑的插值,可以选择在4×4 邻域源图像中的像素,然后从拟合样条中读出相应的目标值,这时选择INTER_CUBIC插值方法。Lanczos插值与INTER_CUBIC方法类似,但使用来自像素周围8×8邻域的信息。

2、 图像金字塔

图像金字塔广泛用于各种视觉应用。图像金字塔是图像的集合,全部来自单个原始图像被连续降采样,直到达到某个所需的停止点。(这个停止点可能是单像素图像!)在文献和应用中经常出现两种图像金字塔:Gaussian和Laplacian金字塔。 高斯金字塔用于降采样图像,当想从金字塔中较低的图像重建上采样图像时,需要拉普拉斯金字塔。

通常,首先用高斯核对图像进行卷积,然后去除每一个偶数行和列,从金字塔的i层产生高斯金字塔中的(i + 1)层。 当然,在这种情况下,每张图片的面积恰好是其原面积的四分之一。在输入图像上迭代这个过程会产生整个金字塔。 OpenCV提供了一种生成每个金字塔阶段的方法:

void cv::pyrDown(

cv::InputArray src,

cv::OutputArray dst,

const cv::Size& dstsize = cv::Size()

);

如果将目标大小参数dstsize设置为cv :: Size()的默认值,那么cv :: pyrDown()方法输出图像的默认大小是((src.cols + 1)/ 2,(src.rows + 1)/ 2)。也可以提供一个dstsize,它将指示希望输出图像的大小; 然而,dstsize必须遵守一些非常严格的限制。 此限制意味着目标图像非常接近源图像大小的一半。dstsize参数仅用于处理有些特殊的情况,在这种情况下需要对如何构建金字塔进行严格的控制。

如果有一个图像,并希望构建一系列新的图像,每个图像都从他们的源图像缩小。 函数cv :: buildPyramid()在一次调用中创建了这样一组图像。

void cv::buildPyramid(

cv::InputArray src,

cv::OutputArrayOfArrays dst,

int maxlevel

);

参数src是源图像。 参数dst是一个OutputArrayOfArrays,可以把它看作是一个STL vector<>或OutputArray类型的对象。最常见的例子是vector <cv :: Mat>。 参数maxlevel指出要构建多少金字塔等级。参数maxlevel是大于或等于0的任何整数,指示要生成的金字塔图像数量。当buildPyramid()运行时,它将返回一个长度为maxlevel + 1的dst中的向量。 dst中的第一项将与src相同。 第二个将是一半,就像调用pyrDown()一样。 第三个将是第二个的一半。

可以通过pyrUp()操作将现有图像转换为每个方向两倍大的图像:

void cv::pyrUp(

cv::InputArray src,

cv::OutputArray dst,

const cv::Size& dstsize = cv::Size()

);

在这种情况下,图像首先在每个维度上升为原来的两倍,新行填充0。 之后,用高斯滤波器进行卷积以估算“缺失”像素的值。

类似于PyrDown(),如果dstsize被设置为Size()的默认值,那么生成的图像的大小将是src的两倍。 同样,可以提供一个dstsize来指示想要的输出图像的大小,但它必须再次遵守一些非常严格的约束条件。

注意, pyrUp()不是pyrDown()的逆函数。因为pyrDown()是一个丢失信息的操作符。为了恢复原始图像,需要访问下采样过程丢弃的信息。这些数据形成拉普拉斯金字塔。图像大小调整比较简单,这里只提供一个简单的示例程序。

例1 调整图像大小

#include <iostream>
#include <opencv2opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{Mat src = imread("E:/ img1.bmp", 1);imshow("原始图像", src);Mat dst;resize(src, dst, Size(500, 500));imshow("resize图像", dst);Mat pyrDownImg;pyrDown(src, pyrDownImg);imshow("下采样图像", pyrDownImg);waitKey(0);return 0;
}

plt.scatter设置点大小_23、OpenCV调整图像大小相关推荐

  1. OpenCV基础(3)使用OpenCV调整图像大小

    让我们学习如何使用OpenCV调整图像大小.要调整图像的大小,请根据指定的比例因素或设置所需的高度和宽度,沿着每个轴(高度和宽度)缩放图像. 当调整图像大小: 如果你想在调整后的图像中保持相同的大小, ...

  2. 6.openCV调整图像大小新思路(cv2.resize和imutils.resize)

    6.opencv调整图像大小的新方法imutils.resize 一.openCV 调整图像大小 ( cv2.resize ) 二.项目结构和代码讲解 1.项目结构 2.代码讲解 3.比较 OpenC ...

  3. 使用OpenCV调整图像大小

    要调整图像的大小,可以沿着每个轴(高度和宽度)缩放它,考虑指定的比例系数,或者设置所需的高度和宽度. 当调整图片大小时: 重要的是要记住图像的原始长宽比(即宽高比),如果你想在调整大小的图像中保持相同 ...

  4. 【OpenCV入门】调整图像大小/裁剪图像

    调整图像大小-resize 函数resize 函数的定义 void resize( InputArray src, //输入图像OutputArray dst,//输出图像Size dsize, // ...

  5. C++ OpenCV 使用 resize() 调整图像大小

    调整图像大小意味着改变它的尺寸,无论是宽度.高度还是两者都改变​​.此外,原始图像的纵横比可以保留在调整大小的图像中.为了调整图像大小,OpenCV 提供了 resize() 函数. resize() ...

  6. opencv resize 调整图像大小

    函数原型 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpol ...

  7. python调整图像大小_使用Python调整图像大小

    作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...

  8. python运行界面如何缩小_如何使用Python调整图像大小

    作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...

  9. 使用Python调整图像大小

    作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...

最新文章

  1. python requests max retries_我可以为request.request设置max_retries吗?
  2. Jupyter Notebook快捷键
  3. hdu 5072 Coprime
  4. 灵雀云容器PaaS平台助力知名股份制银行金融科技革新
  5. c语言不被O2优化,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  6. Java 8流中的数据库CRUD操作
  7. 【完成发布】Lazy Line Painter – 非常有趣的 jQuery 路径动画插件
  8. JavaScript | 声明数组并在每个循环中使用的代码
  9. win10 x64下安装oracle 12c出现[INS-30131]报错的解决方案
  10. c++ 无法读取内存_为什么内存频率只有2133比实际低?开XMP提高内存频率方法
  11. unable to remove repository reference  (must force) - container is using its referenced image
  12. 2021 软考 软件设计师考试教程(详细版)
  13. 74LS系列芯片简记——20-30
  14. 大厂面试为什么总考算法?如何避开算法面试?
  15. 扩展Win7虚拟机硬盘
  16. htmlcss系列学习——(五)css选择器
  17. 【渗透测试】CS DNS上线(DoH隧道技术实践浅析)
  18. 三峡学院计算机调剂,重庆三峡学院2019年硕士研究生调剂信息
  19. 杭州电子科技大学程序设计竞赛(2016’12)- 网络同步赛 1004
  20. 串口助手-简易串口助手-带时间戳的串口助手-极简串口助手-V1.5 自动保存配置参数 能显示收发时间方便调试

热门文章

  1. C++之最小生成树算法(Prim)
  2. mysql删除所有男生_My SQL常用操作汇总
  3. JavaScript代码实现ATM自动存取款功能
  4. 【武侠类网游预研】逆水寒
  5. 王利阳:唯品会的“危机”与“反击”
  6. 基于树莓派4B的智能无人巡逻小车设计-答辩PPT
  7. iPhone呼叫转移失败
  8. three.js天空盒贴地解决方案
  9. matlab 图像倒置
  10. 什么是uni-app?为什么要学习uni-app?