python学opencv|读取图像(三)放大和缩小图像

【1】引言

前序已经学习了常规的图像读取操作和图像保存技巧,相关文章链接为:

python学opencv|读取图像-CSDN博客

python学opencv|读取图像(二)保存彩色图像-CSDN博客

今天我们更近一步,学习放大和缩小图像的技巧,力求掌握cv.resize()函数的用法。

【2】opencv官方教程

点击系下述链接,可以直达官网教程:

OpenCV: Geometric Image Transformations

在官网有很多函数,今天主要学习下述内容:

065adec7002941779e00008e46c1f184.png

图1

其实这里讲的比较简单,综合起来就是:

resize(src, dst, dst.size(), fx, fy, interpolation)

src,输入图像,必须有,这是修改大小的初始条件;

dst,输出图像,如果不为0,大小和dsize一致,否则就,通过输入计算fx和fy;输出图像和输入图像的类型一致;

dsize,输出图像的大小,如果=0或者none,就用fx和fy来修改图像;

fx,水平方向放大因子;

fy,竖直方向放大因子;

interpolation,插值方法。

【3】代码测试

在上述基础上,输入以下代码做测试:

import cv2 #引入CV模块# 读取图片
image = cv2.imread('opencv-picture-001.png')# 定义放大因子
scale_factor = 2# 放大图片,使用立方插值
scaled_image = cv2.resize(image, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_CUBIC) #INTER_CUBIC插值# 保存结果
cv2.imwrite('scaled_image-22-INTER_CUBIC.png', scaled_image)# 显示结果
cv2.imshow('Scaled Image', scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里,使用的原图像为opencv-picture-001.png:

615820ec82c948b89ac89c5a01b0073f.png

图2

用了两倍的放大因子:scale_factor=2

使用的插值方法为:cv2.INTER_CUBIC

运行后的输出图像为:

80597c78e7ce4654aa3698d5758b9e30.png

图3

上传网站后好像图2和图3没有区别,我们看一下它们的大小:

44b8fc4406e5459da0b50069621fff84.png

图4

可见图3相对于图2确实是分别率扩大了两倍。

【4】插值方法测试

在上述测试案例上,我们获得的放大图像在上传CSDN网站后依然清晰。

实际上改变图像大小有多种插值方法,相关链接为:

OpenCV: Geometric Image Transformations

我们主要研究一下前面三种:

707b231009354ed5880095158d613390.png

图5

更新插值和保存图像代码为:

# 放大图片,使用不同插值方法
scaled_image = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1= cv2.resize(image, None, fx=0.2, fy=2.2, interpolation=cv2.INTER_NEAREST)
scaled_image2= cv2.resize(image, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR )
# 保存结果
cv2.imwrite('scaled_image-22-INTER_CUBIC.png', scaled_image)
cv2.imwrite('scaled_image-22-INTER_NEAREST.png', scaled_image1)
cv2.imwrite('scaled_image-22-INTER_LINEAR.png', scaled_image2)

获得的cv2.INTER_NEAREST和cv2.INTER_LINEAR插值图像为:

24d02cbaf3ca47c4b0d33d329fa0e3f1.png

图6  cv2.INTER_NEAREST

图6是使用NEAREST插值方法,横向缩小为原来的0.2倍,竖向扩大为原来的2.2倍后的效果。

7bb1c76233c94e3b8152c38b2ef337cf.png

图7 cv2.INTER_LINEAR

图7是使用 LINEAR插值方法,横向和竖向均缩小为原来的0.5倍后的图像。

之后我们继续修改,使图像的放大因子保持一致:

scaled_image = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1= cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_NEAREST)
scaled_image2= cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR )
# 保存结果
cv2.imwrite('scaled_image-220-INTER_CUBIC.png', scaled_image)
cv2.imwrite('scaled_image-220-INTER_NEAREST.png', scaled_image1)
cv2.imwrite('scaled_image-220-INTER_LINEAR.png', scaled_image2)

此时获得的图像为:

3fceec8701574e22a492cf34bb55b39f.png8ffa028dbbbf45d2903c91fcc4171270.png04485e4573a14032b178cebdce8e7499.png

图8 从上到下CUBIC-NEAREST-LINEAR

相对来说,CUBIC插值法获得的图像清晰度最好。

此时的完整代码为:

import cv2 #引入CV模块# 读取图片
image = cv2.imread('opencv-picture-001.png')# 定义放大因子
scale_factor = 2# 放大图片,使用不同插值方法
scaled_image = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) #INTER_CUBIC插值
scaled_image1= cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_NEAREST)
scaled_image2= cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR )
# 保存结果
cv2.imwrite('scaled_image-220-INTER_CUBIC.png', scaled_image)
cv2.imwrite('scaled_image-220-INTER_NEAREST.png', scaled_image1)
cv2.imwrite('scaled_image-220-INTER_LINEAR.png', scaled_image2)
# 或者显示结果
cv2.imshow('Scaled Image', scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

【5】总结

探索了使用python+opencv放大和缩小图像的方法。

经过对比不同的插值方法,发现CUBIC插值法获得的图像清晰度最好。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D86【python 接口自动化学习】- pytest基础用法

day86 pytest配置testpaths 学习日期:20241202 学习目标:pytest基础用法 -- pytest配置testpaths 学习笔记: pytest配置项 主目录创建pytest.ini文件 [pytest] testpaths./testRule 然后Terminal里直接命令:pytest&#xff…

基于 Apache Dolphinscheduler3.1.9中的Task 处理流程解析

实现一个调度任务,可能很简单。但是如何让工作流下的任务跑得更好、更快、更稳定、更具有扩展性,同时可视化,是值得我们去思考得问题。 Apache DolphinScheduler是一个分布式和可扩展的开源工作流协调平台,具有强大的DAG可视化界…

蓝桥杯2117砍竹子(简单易懂 包看包会版)

问题描述 这天, 小明在砍竹子, 他面前有 n 棵竹子排成一排, 一开始第 i 棵竹子的 高度为 hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为 H, 那么 用一次魔法可以 把这一段竹子的高度都变为 ⌊H2⌋…

如何进行 JavaScript 性能优化?

要进行 JavaScript 性能优化,我们可以从多个角度进行思考,主要包括减少页面渲染时间、减少内存占用、优化代码执行效率等。以下是优化的一些方法,并结合实际项目代码示例讲解。 目录结构 减少 DOM 操作 缓存 DOM 元素批量更新 DOM 优化 Jav…

CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)

通过网盘分享的文件:如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…

selenium-常见问题解决方案汇总

selenium-常见问题解决方案 selenium版本selenium代理本地浏览器页面Selenium之多窗口句柄的切换 selenium版本 selenium版本为: 3.141.0 注:selenium4x跟selenium3x会有不同的使用方法, selenium代理本地浏览器页面 利用 Selenium 库实现对 Google C…

Flask使用长连接

Flask使用flask_socketio实现websocket Python中的单例模式 在HTTP通信中,连接复用(Connection Reuse)是一个重要的概念,它允许客户端和服务器在同一个TCP连接上发送和接收多个HTTP请求/响应,而不是为每个新的请求/响…

雨晨 26100.2454 Windows 11 24H2 专业工作站 极简纯净版

文件: 雨晨 26100.2454 Windows 11 24H2 专业工作站极简 install.esd 大小: 1947043502 字节 修改时间: 2024年12月6日, 星期五, 16:38:37 MD5: 339B7FDCA0130D432A0E98957738A9DD SHA1: 2978AE0CEAF02E52EC4135200D4BDBC861E07BE8 CRC32: 8C329C89 简述: 由YCDIS…

[docker中首次配置git环境与时间同步问题]

11月没写东西,12月初赶紧水一篇。 刚开始搭建docker服务器时,网上找一堆指令配置好git后,再次新建容器后忘记怎么配了,,这次记录下。 一、git ssh指令法,该方法不用每次提交时输入密码 前期准备&#xff0…

MongoDB性能监控工具

mongostat mongostat是MongoDB自带的监控工具,其可以提供数据库节点或者整个集群当前的状态视图。该功能的设计非常类似于Linux系统中的vmstat命令,可以呈现出实时的状态变化。不同的是,mongostat所监视的对象是数据库进程。mongostat常用于…

linux下的python打包

linux下的python打包 一、pyinstaller 优点:打包简单,将整个运行环境进行打包 缺点:打包文件大、臃肿、启动慢 安装pyinstaller包 pip install pyinstaller 打包一个文件 pyinstaller -D app.py会在当前路径中生成build、dist文件夹还有…

Python模块之random、hashlib、json、time等内置模块语法学习

Python内置模块语法学习 random、hashlib、json、time、datetime、os等内置模块语法学习 模块 简单理解为就是一个.py后缀的一个文件 分为三种: 内置模块:python自带,可调用第三方模块:别人设计的,可调用自定义模块…

从ctfwiki开始的pwn之旅 5.ret2csu

ret2csu 原理 在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄存器对应的 gadgets。 这时候,我们可以利用 x64 下的 __libc_csu_init 中的 gadgets。这个函数是用来对 libc 进行初始…

Ceph对象存储

Ceph对象存储1.概念对象存储(Object Storage)是一种用于存储大量非结构化数据的架构模型它使用简单的HTTP或HTTPS协议进行文件访问,而不是传统的文件系统API与传统的文件系统存储方式不同,对象存储不是将数据存储在目录或文件夹中…

嵌入式蓝桥杯学习拓展 LCD翻转显示

通过配置SS和GS两个标志位,实现扫描方向的切换。 将lcd.c的REG_932X_Init函数进行部分修改。 将LCD_WriteReg(R1, 0x0000);修改为LCD_WriteReg(R1,0x0100); 将LCD_WriteReg(R96, 0x2700); 修改为LCD_WriteReg(R96, 0xA700); void REG_932X_Init1(void) {LCD_Wr…

小程序 —— Day1

组件 — view和scroll-view view 类似于HTML中的div,是一个块级元素 案例:通过view组件实现页面的基础布局 scroll-view 可滚动的视图区域,用来实现滚动列表效果 案例:实现纵向滚动效果 scroll-x属性:允许横向滚动…

git pull error: cannot lock ref

Git: cannot lock ref ‘refs/remotes/origin/feature/xxx’: refs/remotes/origin/feature/xxx/car’ exists; cannot create refs/remotes/origin/feature/xxx git remote prune origin重新整理服务端和本地的关联关系即可

pubmed关键词搜索技能1:待更新

1,白话变为领域内学术词: 例如,我想要做蛋白质糖基化修饰以功能,这个领域课题,则 第一性原理,首先是拆分词汇:糖基化(一般比蛋白质、修饰、功能要在title中更常见,或者是…

iPhone手机清理软件:相册清理大师推荐

随着智能手机成为我们日常生活的必需品,手机中的数据日益膨胀,尤其是照片和视频这类容易积累的文件。对于iPhone用户来说,管理这些文件,特别是清理相册变得尤为重要。本文将介绍一款备受推崇的iPhone手机清理软件——CleanMyPhone…

SpringBoot 开源停车场管理收费系统

一、下载项目文件 下载源码项目文件口令: 【前端小程序地址】(3.0):伏脂火器白泽知洞座/~6f8d356LNL~:/【后台管理地址】(3.0):伏脂火器仇恨篆洞座/~0f4a356Ks2~:/【岗亭端地址】(3.0):动作火器智汇堂多好/~dd69356K6r~:/复制口令…