☞ ░ 前往老猿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. CentOS中vsftp安装与配置
  2. RF中alert的处理
  3. [java进阶]1.Java读取txt文件和写入txt文件
  4. Megastore:为交互式服务提供可扩展的高可用性存储
  5. 传锤子科技解散成都分公司 才搬迁一年罗永浩就顶不住了
  6. 快速幂算法相关题目(Leetcode题解-Python语言)
  7. 猛然回首 在这里4年了
  8. OSChina 周一乱弹 ——节后突然不想上班的节奏
  9. 华为跨域bgp_通知:2019华为认证体系全新升级!
  10. 使用IE浏览器访问JSP界面,当使用断点时相关的样式会显示,当不适用断点时,相关的样式不会显示
  11. 二级c语言试题讲解,计算机二级C语言真题讲解.ppt
  12. android炫酷动画源码,QQ菜单、瀑布流、二维码源码
  13. Python3 百度拾取坐标系统API的调用
  14. springmvc ajax 传参
  15. MySQL数据排序asc、desc
  16. oracle查看日期是第几周
  17. python开发前景如何
  18. Unity音频可视化
  19. 多线程下载王者荣耀高清壁纸(过程超详细)
  20. 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)

热门文章

  1. embed预览pdf_#网页中动态嵌入PDF文件/在线预览PDF内容#
  2. 河南大学计算机论文,河南大学本科毕业论文.doc
  3. LVGL | LVGL之PC模拟器中文文档
  4. 一口气读懂什么是房地产CRM
  5. 中小企业CRM评测-总评
  6. successful sensing probability
  7. 基于Qiskit——《量子计算编程实战》读书笔记(五)
  8. Kotlin报错:Out-projected type ... prohibits the use of ... defined in ...的解决方案
  9. 汽车车牌识别系统实现(三)-- 车牌矫正+字符分割+代码实现
  10. 从零搭建本地pypi镜像源2:下载清华pypi镜像源