当前位置: 首页 > news >正文

python opencv压缩图片_OpenCV Python 缩放图片

By 凌顺

2019年9月12日

本示例使用的OpenCV版本是:4.1.1

运行Python的编辑器:Jupyter notebook

示例目的

使用OpneCV的cv2.resize()函数对图片进行放大与缩小。

实现代码

1,加载图片

从文件中加载图像,并输出该图片的大小(高度和宽度)

import cv2 # 加载OpenCV

import matplotlib.pyplot as plt # 加载Matplotlib.pyplot存进plt

img = cv2.imread("cook.jpeg") # 读取/加载 图片

print('original image shape:', img.shape) #输出图片的高度,宽度,色彩通道数量

执行上面的代码,会看到大概如下输出,数字分别代表着高度,宽度,色彩通道数量

original image shape: (147, 342, 3)

在本教程,我们只关心高度和宽度。

2,把图像缩小1倍

使用 cv.resize() 我们可以指定宽度和高度进行缩放,例如,我把宽度和高度都除以2,则可以把图片缩小1倍。

# 获取图片高度,宽度,色彩通道数量

height, width, channel = img.shape

# 使用cv.resize对图像进行缩放

resized_img = cv2.resize(img, (width//2, height//2))

# 输出缩小后的图像高度,宽度,色彩通道数量

print('resized to image shape:', resized_img.shape)

这时可以看到,高度是73,宽度是171,正好是原图的缩小2倍,小数部分向下取整。

resized to image shape: (73, 171, 3)

3,把图像放大一倍

使用同样的方法,我也可以把图像放大2倍。例如,我把宽度和高度都乘以2。

# 使用cv.resize对图像进行缩放

resized_img = cv2.resize(img, (width*2, height*2))

# 输出缩放后的图像高度,宽度,色彩通道数量

print('resized to image shape:', resized_img.shape)

这时可以看到,高度是294,宽度是684,正好是原图的放大2倍。

resized to image shape: (294, 684, 3)

4,通过因数进行原图比例的缩放

通过原图的比例因数进行缩放

# 定义缩放因素,w_mult宽度因数,h_mult高度因数

w_mult, h_mult = 0.25, 0.5

# 使用因数进行缩放的示例

resized_img = cv2.resize(img, (0, 0), resized_img, h_mult, w_mult)

# 输出缩放后的图像高度,宽度,色彩通道数量

print('resized to image shape:', resized_img.shape)

```python

可以看到如下输出:

> resized to image shape: (74, 86, 3)

### 5,指定使用最临近插值方式进行缩放

我们使用cv2.INTER_NEAREST定义了缩放的方式为最临近插值方式。

> 最临近插值,通常被用于图像缩放中,进行缩放图像的方法叫做最临近插值算法,这是一种最基本、最简单的图像缩放算法。效果并不好,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真;效果不好的根源就是其简单的最临近插值方法引入了严重的图像失真。

```python

w_mult, h_mult = 0.25, 0.5

resized_img = cv2.resize(img, (0, 0), resized_img, w_mult, h_mult, cv2.INTER_NEAREST)

print('half sized image shape:', resized_img.shape)

可以看到如下输出:

resized to image shape: (74, 86, 3)

程序说明

OpenCV还提供了多样的缩放方法

本示例主要使用了cv.cvtColor()函数进行色彩空间的转换,该函数有两个参数,两个可选参数。而在显示图片方面如果使用cv.imshow()窗口显示的方式,图片的颜色会正常些,使用plt.imshow()在Jupyter notebook显示的颜色则可能需要一些转换或设置才能达到想要的颜色。

cv.resize()语法

dst = cv.resize( src, dsize[, dst[, fx[, fy[, interpolation]]]] )

第一个参数 src,输入的图像,

第二个参数 dsize,输出图像的尺寸; 如果等于零,则计算如下:

𝚍𝚜𝚒𝚣𝚎 = 𝚂𝚒𝚣𝚎(𝚛𝚘𝚞𝚗𝚍(𝚏𝚡𝚜𝚛𝚌.𝚌𝚘𝚕𝚜) 𝚛𝚘𝚞𝚗𝚍(𝚏𝚢𝚜𝚛𝚌.𝚛𝚘𝚠𝚜))

(可选)第三个参数 dst,输出的图像

(可选)第四个参数 fx,水平轴的比例因子,如果为0时,计算为(𝚍𝚘𝚞𝚋𝚕𝚎)𝚍𝚜𝚒𝚣𝚎.𝚠𝚒𝚍𝚝𝚑/𝚜𝚛𝚌.𝚌𝚘𝚕𝚜

(可选)第四个参数 fy,垂直轴的比例因子,如果为0时,计算为(𝚍𝚘𝚞𝚋𝚕𝚎)𝚍𝚜𝚒𝚣𝚎.𝚑𝚎𝚒𝚐𝚑𝚝/𝚜𝚛𝚌.𝚛𝚘𝚠𝚜

相关文章:

  • mac cad石材填充图案_这些石材装饰细节处理,你做到位了吗?
  • python逻辑_python逻辑题
  • python语言求素数_用python判断一个数是否是素数的方法
  • 统计高于平均分的人数python_python3 下载 以及 练习1
  • cv::imread导致段错误_OGG启动报错:不能创建共享内存段
  • opengl场景代码_实战篇使用Native OpenGL渲染Unity场景
  • python中dtype是object是什么意思_python – Pandas:将dtype’object’转换为int
  • 人脸比对软件_开源推荐 | 可实现门禁、AI测温敏捷开发的人脸识别应用套件
  • coursera python证书_IBM数据科学证书 | 你想要的一站式新手入门课!
  • 前后端分离项目如何部署_利用dockercompsoe部署前后端分离的项目
  • python天气图形化显示_python可视化爬虫界面之天气查询
  • 电脑控制iphone_iPhone屏幕镜像怎么用?
  • python是用什么语言开发的_为什么Python不是编程语言的未来
  • python 进度条_Python实例1之如何把进度条玩出花儿
  • qcustomplot绘制动态曲线_matplotlib库:动态图
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017届校招提前批面试回顾
  • canvas 绘制双线技巧
  • classpath对获取配置文件的影响
  • ECMAScript6(0):ES6简明参考手册
  • ES6 ...操作符
  • express.js的介绍及使用
  • JavaScript服务器推送技术之 WebSocket
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java面向对象及其三大特征
  • Mithril.js 入门介绍
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从零开始的无人驾驶 1
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 面试遇到的一些题
  • 那些被忽略的 JavaScript 数组方法细节
  • 爬虫模拟登陆 SegmentFault
  • 浅谈Golang中select的用法
  • 如何在GitHub上创建个人博客
  • 深入浅出webpack学习(1)--核心概念
  • 说说动画卡顿的解决方案
  • ​flutter 代码混淆
  • ​ssh免密码登录设置及问题总结
  • # 计算机视觉入门
  • (03)光刻——半导体电路的绘制
  • (1)(1.9) MSP (version 4.2)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (HAL库版)freeRTOS移植STMF103
  • (libusb) usb口自动刷新
  • (Note)C++中的继承方式
  • (pojstep1.3.1)1017(构造法模拟)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)c52学习之旅-中断实验
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (多级缓存)多级缓存
  • (附源码)ssm考生评分系统 毕业设计 071114