☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░

图像缩放用于对图像进行缩小或扩大,当图像缩小时需要对输入图像重采样去掉部分像素,当图像扩大时需要在输入图像中根据算法生成部分像素,二者都会利用插值算法来实现。

一、支持的插值算法说明

OpenCV支持的插值算法包括如下表格中的前6种,后面几种不是插值算法,而是补充的标记:

相关插值算法比较(参考《OpenCV图像缩放resize各种插值方式的比较》):

  • 速度比较:INTER_NEAREST(最近邻插值)>INTER_LINEAR(线性插值)>INTER_CUBIC(三次样条插值)>INTER_AREA (区域插值)
  • 对图像进行缩小时,为了避免出现摩尔纹现象,推荐采用INTER_AREA 区域插值方法
  • 要放大图像,通常使用INTER_CUBIC(速度较慢,但效果最好),或者使用INTER_LINEAR(速度较快,效果还可以)。至于最近邻插值INTER_NEAREST,一般不推荐使用

关于具体算法的介绍请参考以下资料:

  • 关于线性插值的介绍老猿觉得最容易懂的是知乎上的《【数学】线性插值》上的介绍,简单易懂地介绍了线性插值、双线性插值、双三次插值。
  • 关于最邻近插值和双线性插值的原理可以参考《OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)》
  • 关于兰索斯插值请参考《Lanczos插值,最邻近插值,双线性二次插值,三次插值》
  • 《OpenCV图像缩放resize各种插值方式的比较》
  • 《OpenCV中resize函数五种插值算法的实现过程》,使用C语言实现了五种插值算法
  • 《OpenCV插值算法原理》介绍了最邻近插值和双线性插值的原理。

二、缩放函数resize介绍

2.1、调用语法

图像缩放使用函数resize,可以将图像按照指定大小或缩放因子进行缩放。
dst = resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

2.2、参数及返回值说明

  • src:输入图像
  • dsize:缩放到的目标图像大小
  • dst:目标图像, 不需要考虑dst的初始大小,目标图像的初始大小是dsize或fx和fy指定的,如果需要按照dst的大小来确认结果图像大小,需要先将dst对应大小赋值给dsize
  • fx:水平方向即宽度的缩放因子,如果为0,则fx=dsize.width/src.cols,类型为带小数位的数字
  • fy:竖直方向即高度的缩放因子,如果为0,则fy=dsize.height/src.rows,类型为带小数位的数字
  • interpolation:插值方法
  • 返回值:缩放后的图像
注意:

经测试验证:

  1. dsize和fx/ fy二者必须指定一个,如果二者都指定,以dsize为准,fx/ fy被忽略;
  2. 图像缩放时未指定插值算法的结果与插值算法为INTER_LINEAR的结果相同

三、案例

下面的案例是读取两张大小不同的图像,相互参照以各种插值方法进行缩放,并比较哪种插值方法和不带插值实参的结果一致:

代码:
import cv2
import numpy as npfrom opencvPublic import preparePreviewImg,previewImgList,readImgFile,cmpMatrixdef main(largeImg,smallImg):interMethod = [cv2.INTER_NEAREST,cv2.INTER_LINEAR,cv2.INTER_CUBIC,cv2.INTER_AREA,cv2.INTER_LANCZOS4,cv2.INTER_LINEAR_EXACT]interMethodInf = ['INTER_NEAREST', 'INTER_LINEAR', 'INTER_CUBIC', 'INTER_AREA', 'INTER_LANCZOS4','INTER_LINEAR_EXACT']information = "老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号"largeImg = readImgFile(largeImg, False) #自定义读入图片文件的函数,具体功能请参考:https://blog.csdn.net/LaoYuanPython/article/details/111351901smallImg = readImgFile(smallImg, False)preparePreviewImg('largeImg',largeImg)preparePreviewImg('smallImg', smallImg)imgNoInterMethod = cv2.resize(smallImg,largeImg.shape[0:2])preparePreviewImg('未指定放大算法' , imgNoInterMethod)for mi in zip(interMethod,interMethodInf):m,i = miimgM = cv2.resize(smallImg,largeImg.shape[0:2],fx=0.8,fy=0.8,interpolation=m)preparePreviewImg('放大算法:'+i, imgM)if cmpMatrix(imgNoInterMethod,imgM):print(f"图像放大时未指定插值算法的结果与插值算法为{i}的结果相同")previewImgList()imgNoInterMethod = cv2.resize(largeImg, smallImg.shape[0:2])preparePreviewImg('未指定放大算法', imgNoInterMethod)for mi in zip(interMethod, interMethodInf):m, i = miimgM = cv2.resize(largeImg, smallImg.shape[0:2], interpolation=m )preparePreviewImg('缩小算法:' + i, imgM)if cmpMatrix(imgNoInterMethod,imgM):print(f"图像缩小时未指定插值算法的结果与插值算法为{i}的结果相同")print(f"\n更多学习资料请参考:\n    {information}")previewImgList()cv2.waitKey(0)main(r'f:\pic\咖啡狗.jpg',r'f:\pic\咖啡狗小图.JPG')

上述代码中从opencvPublic 导入的preparePreviewImg、previewImgList、readImgFile、cmpMatrix相关函数功能请参考《https://blog.csdn.net/LaoYuanPython/article/details/111351901 OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》的说明。

输出:
图像放大时未指定插值算法的结果与插值算法为INTER_LINEAR的结果相同
图像缩小时未指定插值算法的结果与插值算法为INTER_LINEAR的结果相同更多学习资料请参考:老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/109160152,敬请关注同名微信公众号
图像放大预览结果:


由于预览图像高度太大被缩小了,放大一点看输入的两张图像,小的在右上角很小的地方:

下面是未指定放大算法的结果预览图:

其他的图像效果差异不是很大,就不展示了。

图像缩小预览图像:

四、小结

本节简单介绍了与图像缩放相关的插值算法、并详细介绍OpenCV图像缩放的函数resize相关的语法、参数以及应用案例。不同的插值算法对资源的开销不同,最终效果也会不一致,大家进行图像缩放时,如无特殊要求,插值算法使用默认值即可。

更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理》相关文章。

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学OpenCV!

☞ ░ 前往老猿Python博文目录 ░

OpenCV-Python图像处理:插值方法及使用resize函数进行图像缩放相关推荐

  1. Opencv Python图像处理进阶教程②

    Opencv Python图像处理进阶教程 概述: 代码: https://github.com/bai1231/opencv-learn_and_pratice 1. 图像卷积与应用 图像去噪 图像 ...

  2. opencv 中从cv::line和resize()函数

    转自: https://blog.csdn.net/weixin_36340947/article/details/77095924 转自: https://blog.csdn.net/robinhj ...

  3. Visual Studio 2019 搭配OpenCV 调整图片显示大小:resize函数使用实例

    Visual Studio 2019 搭配OpenCV 对图片显示大小进行调整: resize函数使用实例 大家好,在使用Visual Studio 2019 搭配OpenCV 对图片进行处理的过程中 ...

  4. c语言实现图像resize函数,调整图像的尺寸 - cvResize() 函数实现

    前言 有时会碰到一张图片太大了,想将它缩小.本文将讲解一个很好用的函数解决这个问题. 图像尺寸调整函数 cvResize() // 图像尺寸调整函数 void Resize ( const CvArr ...

  5. opencv中的resize函数实现图像插值缩放

    如果本文对您有帮助,请帮忙点赞.评论.收藏,感谢! python 为例 一. 函数原型 dst=cv.resize(src, dsize[, dst[, fx[, fy[, interpolation ...

  6. OpenCV+python图像处理基础操作

    1.读写图像(建议使用绝对路径) import cv2 from cv2 im = cv2.imread('C:/Users/admin/Desktop/test/1.jpg') cv2.imwrit ...

  7. python图像处理(二)绘制函数图像

    1.绘制2D简单函数 import numpy as np import matplotlib.pyplot as pltx=np.linspace(0,4*np.pi,100) #从0到4π均匀取1 ...

  8. [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. Opencv Python版学习笔记01.计算机眼中的图像

    在计算机眼里,图像是通过数字矩阵的形式存储的.如上图所示,这张图片被分为了若干个小方格,但是每个方格仍然不够小,随意取出一个方格放大观察,这个方格是由许多小格组成的,其中每个小格叫做一个像素点,像素点 ...

最新文章

  1. CSS魔法堂:重拾Border之——更广阔的遐想
  2. cat查看tomcat日志 linux_linux怎么使用cat命令查看文件? linux中cat命令的使用方法
  3. 毛笔笔锋算法IOS版
  4. vue-router 如何在当前路由下重新点击当前路由的router-link实现刷新
  5. Django ORM
  6. LeetCode 92. 反转链表 II(双指针)
  7. 大话云存储,这个“对象”可能无处不在
  8. php二维数组指定其键名对其排序的方法
  9. python分配问题_1.1python解决数学建模之席位分配问题
  10. iis启动服务时提示在本地计算机 无法启动iis admin服务,无法启动IIS Express Web服务器...
  11. Nginx系列(3):Nginx配置文件nginx.conf中文详解
  12. dpdk LRO功能总结
  13. 操作系统OS作业整合
  14. python读Excel数据成numpy数组
  15. 工作这些年 (zz)
  16. 王者荣耀关注显示服务器忙,王者荣耀不满足参加该活动的条件 访问繁忙解决方法...
  17. flex之鸡肋功能——双击编辑列内容
  18. AT32 MCU QR USB HID Keyboard例程
  19. android7 华为p9,华为P9 Emui5.0下载
  20. 从ReentrantLock角度解析AQS

热门文章

  1. 工控主板启动不显示的故障原因
  2. Chrome浏览器端跨域不能访问问题处理办法
  3. 浏览器通知push.js 工具(实用)
  4. 河南职称计算机考试准考证
  5. 数值计算程序大放送-特征值和特征向量
  6. Windows上使用vs编译fdk-aac
  7. scratch飞机大战
  8. 一定要学习的几个优秀的开源java项目
  9. ES 状态查询HTTP接口
  10. Histogram of Oriented Gradients