OpenCV resize 改变图片大小,4种方式原理对比
微信: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种方式原理对比相关推荐
- (详解)opencv里的cv2.resize改变图片大小Python
cv2.resize函数结构: image = cv2.resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None) 功能: c ...
- opencv resize改变图片尺寸
cv::resize()函数 函数原型 CV_EXPORTS_W void resize( InputArray src,OutputArray dst,Size dsize, double fx=0 ...
- Python+opencv裁剪/截取图片的几种方式
文章目录 前言 一.手动单张裁剪/截取 二.根据图片的位置坐标进行裁剪/截取 三.根据xml文件截取/裁剪目标 四.opencv获取边缘并根据bounding box截取/裁剪目标 五.用YOLO目标 ...
- python批量resize图片大小_python opencv 批量改变图片的尺寸大小的方法
我目标文件夹下有一大批图片,我要把它转变为指定尺寸大小的图片,用pthon和opencv实现的. 以上为原图片. import cv2 import os # 按指定图像大小调整尺寸 def resi ...
- C#使用OpenCv图像批处理——改变图片大小并且重命名
添加NuGet包 选择最新版就好了 安装完成后右键项目重新生成方案 使用OpenCvSharp.CPlusPlus命名空间 using OpenCvSharp.CPlusPlus; 写一个函数用来改变 ...
- ImGui添加背景图片的两种方式
给ImGui添加背景图片的两种方式 最近在使用ImGui做客户端程序,想给窗口添加背景图片,但是作者的文档里面好像并没有讲如何添加背景图片,研究了下找到了两种方式. 第一种 创建一个和窗口一样大的Im ...
- Linux一条命令改变图片大小
Linux下面有一条命令可以改变图片大小,使用非常方便. Example: convert -resize 100x100 test.jpg test-new.jpg 更多使用方式参考:man con ...
- 修改TOMCAT的JVM虚拟机内存大小几种方式
修改TOMCAT的JVM虚拟机内存大小几种方式 Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大. 经常会出现Java.lang.OutOfMemoryEr ...
- css让image不改变大小_如何改变图片大小
我们进行网页设计的时候图片有时候可以会不符合大小,那我们怎么样才能在代码中实现图片大小的改变呢?本篇文章就来给大家介绍关于如何改变图片的大小? 我们改变图片的大小有两种方法:一种是在HTML标签内更改 ...
最新文章
- cocos2d - CCSprite各种动画
- VK Cup 2015 - Qualification Round 1 A. Reposts(树)
- 往事回忆记得刚写飞鸽传书的时候
- 龟兔赛跑预测(蓝桥杯)
- mybatis与hibernate不同
- iPhone 13用什么蓝牙耳机?五款性能强悍蓝牙耳机推荐
- Tough Days
- 软件工程小组第八次会议记录
- springboot整合mysql
- atxserver2接入iOS设备
- 基于S变换的电压暂降检测研究及仿真设计
- 自己捣鼓的小程序实现订单代付的功能
- UGUI的DrawCall和Rebuild
- Win10笔记本触控板关闭/打开
- MySQL 时间戳操作
- Sentinel 集群限流设计原理
- oracle 二进制算法,二进制搜索(查找)
- 他是这么解决视频版权的,南京小伙做视频剪辑,一个月赚了7k多
- 5G 时代:进击AI+边缘计算 金山视频云引领创新机遇
- Hbase下载安装部署详细步骤
热门文章
- 嘉兴 机器人仓库 菜鸟_揭秘菜鸟自动化仓库 机器人物联网+大数据(附视频)...
- 无涯教程:Node.js - Streams介绍
- 结构体类型(struct)
- QComboBox实现下拉框check勾选
- 幼麟棋牌进入房间逻辑分析
- 计算机组成原理一篇过
- Postman Collection Format v1 is no longer supported and can not be imported directly. You may conver
- Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
- pyqt5中sender方法介绍_PyQt5学习记录(二):Event sender
- winmerge对比时出现中文乱码的解决办法