主要介绍函数resize();

图像缩放的效果图如下:

主程序代码及函数解释如下所示:

  1. /************************************************************************/
  2. /*
  3. OpenCV图像缩放使用的函数是:resize
  4. void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
  5. 参数含义:
  6. InputArray src     -原图像
  7. OutputArray dst    -输出图像
  8. Size dsize         -目标图像的大小
  9. double fx=0        -在x轴上的缩放比例
  10. double fy=0        -在y轴上的缩放比例
  11. int interpolation  -插值方式,有以下四种方式
  12. INTER_NEAREST      -最近邻插值
  13. INTER_LINEAR  -双线性插值 (缺省使用)
  14. INTER_AREA    -使用象素关系重采样,当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。
  15. INTER_CUBIC   -立方插值。
  16. 说明:dsize与fx和fy必须不能同时为零
  17. */
  18. /************************************************************************/
  19. #include <opencv2\opencv.hpp>
  20. #include <opencv2\imgproc\imgproc.hpp>
  21. using namespace cv;
  22. int main()
  23. {
  24. //读入图像
  25. Mat srcImage=imread("1.jpg");
  26. Mat temImage,dstImage1,dstImage2;
  27. temImage=srcImage;
  28. //显示原图
  29. imshow("原图",srcImage);
  30. //尺寸调整
  31. resize(temImage,dstImage1,Size(temImage.cols/2,temImage.rows/2),0,0,INTER_LINEAR);
  32. resize(temImage,dstImage2,Size(temImage.cols*2,temImage.rows*2),0,0,INTER_LINEAR);
  33. imshow("缩小",dstImage1);
  34. imshow("放大",dstImage2);
  35. waitKey();
  36. return 0;
  37. }                      

    1、最邻近元法

      这是最简单的一种插值方法,不需要计算,在待求象素的四邻象素中,将距离待求象素最近的邻象素灰度赋给待求象素。设i+u, j+v(i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v) 如下图所示:

    如果(i+u, j+v)落在A区,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同理,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。

    最邻近元法计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

    2、双线性内插法

    双线性内插法是利用待求象素四个邻象素的灰度在两个方向上作线性内插,如下图所示:

    对于 (i, j+v),f(i, j) 到 f(i, j+1) 的灰度变化为线性关系,则有:

          f(i, j+v) = [f(i, j+1) - f(i, j)] * v + f(i, j)

    同理对于 (i+1, j+v) 则有:

    f(i+1, j+v) = [f(i+1, j+1) - f(i+1, j)] * v + f(i+1, j)

    从f(i, j+v) 到 f(i+1, j+v) 的灰度变化也为线性关系,由此可推导出待求象素灰度的计算式如下:

    f(i+u, j+v) = (1-u) * (1-v) * f(i, j) + (1-u) * v * f(i, j+1) + u * (1-v) * f(i+1, j) + u * v * f(i+1, j+1)

    双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

    3、三次内插法

    该方法利用三次多项式S(x)求逼近理论上最佳插值函数sin(x)/x, 其数学表达式为:

    待求像素(x, y)的灰度值由其周围16个灰度值加权内插得到,如下图:

    待求像素的灰度计算式如下:

    f(x, y) = f(i+u, j+v) = ABC

    其中:

    三次曲线插值方法计算量较大,但插值后的图像效果最好。

opencv-resize()放缩函数简介的更多相关文章

  1. UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

    前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...

  2. epoll 系列函数简介、与select、poll 的区别

    一.epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...

  3. linux进程编程:子进程创建及执行函数简介

    linux进程编程:子进程创建及执行函数简介 子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定 ...

  4. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  5. 【液晶模块系列基础视频】4.5.X-GUI图形界面库-进度条等函数简介

    [液晶模块系列基础视频]4.5.X-GUI图形界面库-进度条等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  6. 【液晶模块系列基础视频】4.4.X-GUI图形界面库-画tab函数简介

    [液晶模块系列基础视频]4.4.X-GUI图形界面库-画tab函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  7. 【液晶模块系列基础视频】4.3.X-GUI图形界面库-画box函数简介

    [液晶模块系列基础视频]4.3.X-GUI图形界面库-画box函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  8. 【液晶模块系列基础视频】4.2.X-GUI图形界面库-画矩形函数简介

    [液晶模块系列基础视频]4.2.X-GUI图形界面库-画矩形函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址: ...

  9. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介

    [液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...

随机推荐

  1. [No0000160]常用C# 正则表达式大全

    正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的正则表达式 ...

  2. phoenix技术(安装部署和基本使用)讲解

    1.phoenix简介 Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问.Apache Phoenix会将用户编写 ...

  3. 类中的函数带有self,不带self的区别

    1.类里函数不带self,这是我们调用类里的函数直接用类名.函数名() class shop(object): def scan_goods(): #括号内不带self print('浏览商品') d ...

  4. LeetCode 867 Transpose Matrix 解题报告

    题目要求 Given a matrix A, return the transpose of A. The transpose of a matrix is the matrix flipped ov ...

  5. Appium入门(8)__控件定位

    部分摘自:http://www.testclass.net/appium/appium-base-find-element/ appium 通过 uiautomatorviewer.bat 工具来查看 ...

  6. SpringBoot-@async异步执行方法

    启动加上@EnableAsync ,需要执行异步方法上加入  @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...

  7. 第三节:Windows下检出项目和提交项目

    1.将项目下载到本地: 2.在客户端中,右键点击test,选择show in explorer: 然后修改日志文件并保存: 3.在客户端中填写备注并提交: 4.提交到github中:

  8. python练习题-day6

    1.老男孩好声⾳选秀⼤赛评委在打分的时候呢, 可以进⾏输入. 假设, 老男孩有10个评委. 让10个评委进⾏打分, 要求, 分数必须⼤于5分, ⼩于10分. pingwei=["a" ...

  9. 动态赋id

  10. 笔记:mysql升序排列asc,降序排列desc

    经常会忘记mysql中升序和降序用什么字符来表示,现在就做个笔记:升序排列asc,降序排列desc,举个例子,下面是按时间降序调用栏目的文章,也即是栏目最新文章 [e:loop={"sele ...