微信:18233275213

本文共总结了OpenCV提供的4种resize图片的方法:
一、最近邻插值法 INTER_NEAREST
二、双线性插值(默认设置) INTER_LINEAR

一、最近邻插值法 INTER_NEAREST

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.示例代码

import cv2
import numpy as np
import osdef over_length(path, save_path):for root, dir, files in os.walk(path):for file in files:# 读入原图片img = cv2.imdecode(np.fromfile(os.path.join(root, file), dtype=np.uint8), -1)print(img)# 将图片高和宽分别x赋值给x,yheight, width = img.shape[0:2]# 显示原图cv2.imshow('OriginalPicture', img)# (width, int(height / 3)) 元组形式,高度缩放到原来的三分之一# img_change1 = cv2.resize(img, (int(width / 2), int(height / 2)))img_change1 = cv2.resize(img, (width, int(height / 2)), cv2.INTER_NEAREST)cv2.imencode('.jpg', img_change1)[1].tofile(save_path + file.split('.')[0]+ '_' + 'overlength' + '.jpg')if __name__ == '__main__':over_length(r'..\历史记录\超长超短\超长\\',r'..\历史记录\超长超短\结果\原图\\')

3. 代码效果

原图:

resize 后的图:

二、 双线性插值(默认设置) INTER_LINEAR

1.简介

OpenCV 默认的设置为 双线性插值
双线性插值,就是两个方向的线性插值加起来。所以只要了解什么是线性插值,分别在x轴和y轴都做一遍,就是双线性插值了。

线性插值的概念也非常简单,就是两个点A,B,要在AB中间插入一个点C(点C坐标在AB连线上),就直接让C的值落在AB的值的连线上就可以了。

如A点坐标(0,0),值为3,B点坐标(0,2),值为5,那要对坐标为(0,1)的点C进行插值,就让C落在AB线上,值为4就可以了。

但是如果C不在AB的线上呢? 所以就有了双线性插值。如图,已知Q12,Q22,Q11,Q21,但是要插值的点为P点,这就要用双线性插值了,首先在x轴方向上,对R1和R2两个点进行插值,即蓝色R1的值根据Q11和Q21的值可求得为:

蓝色R2的值为:

然后根据R1和R2在纵坐标y的方向上对P点进行插值,即

其中上面的f(Q11)、f(Q12)等这些可以理解为一个比例值,更靠近哪个点,在计算时这个点的比重就会大一些。
这就是双线性插值。

2. 示例代码

def over_length(path, save_path):for root, dir, files in os.walk(path):for file in files:# 读入原图片img = cv2.imdecode(np.fromfile(os.path.join(root, file), dtype=np.uint8), -1)print(img)# 将图片高和宽分别x赋值给x,yheight, width = img.shape[0:2]# 显示原图cv2.imshow('OriginalPicture', img)# (width, int(height / 3)) 元组形式,高度缩放到原来的三分之一# img_change1 = cv2.resize(img, (width, int(height / 3)))img_change1 = cv2.resize(img, (int(width * 2), int(height * 2)), cv2.INTER_LINEAR)cv2.imencode('.jpg', img_change1)[1].tofile(save_path + file.split('.')[0]+ '_' + 'overlength' + '.jpg')if __name__ == '__main__':over_length(r'D:\360MoveData\Users\Administrator\Desktop\wo\\',r'D:\360MoveData\Users\Administrator\Desktop\wo\\')

3. 代码效果

原图:


resize后的图片:

个人已经进行了比较,将resize 2倍后的图片同原图片手动放大2倍,效果有一点点的区别,resize后的会差一点,基本上是看不出来的,效果是很不错的。 我是一个放大1000倍,一个放大 500倍 才看出来的一单差别。

OpenCV resize 改变图片大小,4种方式原理对比相关推荐

  1. (详解)opencv里的cv2.resize改变图片大小Python

    cv2.resize函数结构: image = cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) 功能: c ...

  2. opencv resize改变图片尺寸

    cv::resize()函数 函数原型 CV_EXPORTS_W void resize( InputArray src,OutputArray dst,Size dsize, double fx=0 ...

  3. Python+opencv裁剪/截取图片的几种方式

    文章目录 前言 一.手动单张裁剪/截取 二.根据图片的位置坐标进行裁剪/截取 三.根据xml文件截取/裁剪目标 四.opencv获取边缘并根据bounding box截取/裁剪目标 五.用YOLO目标 ...

  4. python批量resize图片大小_python opencv 批量改变图片的尺寸大小的方法

    我目标文件夹下有一大批图片,我要把它转变为指定尺寸大小的图片,用pthon和opencv实现的. 以上为原图片. import cv2 import os # 按指定图像大小调整尺寸 def resi ...

  5. C#使用OpenCv图像批处理——改变图片大小并且重命名

    添加NuGet包 选择最新版就好了 安装完成后右键项目重新生成方案 使用OpenCvSharp.CPlusPlus命名空间 using OpenCvSharp.CPlusPlus; 写一个函数用来改变 ...

  6. ImGui添加背景图片的两种方式

    给ImGui添加背景图片的两种方式 最近在使用ImGui做客户端程序,想给窗口添加背景图片,但是作者的文档里面好像并没有讲如何添加背景图片,研究了下找到了两种方式. 第一种 创建一个和窗口一样大的Im ...

  7. Linux一条命令改变图片大小

    Linux下面有一条命令可以改变图片大小,使用非常方便. Example: convert -resize 100x100 test.jpg test-new.jpg 更多使用方式参考:man con ...

  8. 修改TOMCAT的JVM虚拟机内存大小几种方式

    修改TOMCAT的JVM虚拟机内存大小几种方式 Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大. 经常会出现Java.lang.OutOfMemoryEr ...

  9. css让image不改变大小_如何改变图片大小

    我们进行网页设计的时候图片有时候可以会不符合大小,那我们怎么样才能在代码中实现图片大小的改变呢?本篇文章就来给大家介绍关于如何改变图片的大小? 我们改变图片的大小有两种方法:一种是在HTML标签内更改 ...

最新文章

  1. cocos2d - CCSprite各种动画
  2. VK Cup 2015 - Qualification Round 1 A. Reposts(树)
  3. 往事回忆记得刚写飞鸽传书的时候
  4. 龟兔赛跑预测(蓝桥杯)
  5. mybatis与hibernate不同
  6. iPhone 13用什么蓝牙耳机?五款性能强悍蓝牙耳机推荐
  7. Tough Days
  8. 软件工程小组第八次会议记录
  9. springboot整合mysql
  10. atxserver2接入iOS设备
  11. 基于S变换的电压暂降检测研究及仿真设计
  12. 自己捣鼓的小程序实现订单代付的功能
  13. UGUI的DrawCall和Rebuild
  14. Win10笔记本触控板关闭/打开
  15. MySQL 时间戳操作
  16. Sentinel 集群限流设计原理
  17. oracle 二进制算法,二进制搜索(查找)
  18. 他是这么解决视频版权的,南京小伙做视频剪辑,一个月赚了7k多
  19. 5G 时代:进击AI+边缘计算 金山视频云引领创新机遇
  20. Hbase下载安装部署详细步骤

热门文章

  1. 嘉兴 机器人仓库 菜鸟_揭秘菜鸟自动化仓库 机器人物联网+大数据(附视频)...
  2. 无涯教程:Node.js - Streams介绍
  3. 结构体类型(struct)
  4. QComboBox实现下拉框check勾选
  5. 幼麟棋牌进入房间逻辑分析
  6. 计算机组成原理一篇过
  7. Postman Collection Format v1 is no longer supported and can not be imported directly. You may conver
  8. Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
  9. pyqt5中sender方法介绍_PyQt5学习记录(二):Event sender
  10. winmerge对比时出现中文乱码的解决办法