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

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插值法获得的图像清晰度最好。

 

 

 

 

相关文章:

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

【1】引言 前序已经学习了常规的图像读取操作和图像保存技巧,相关文章链接为: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(二)保存彩色图像-CSDN博客 今天我们更近一步,学习放大和缩小图像的技巧&…...

1 数据库(上):MySQL的概述和安装、SQL简介、IDEA连接数据库使用图形化界面

文章目录 前言一、数据库相关的概念二、MySQL概述1 MySQL的安装和配置2 MySQL登录、退出(1)mysql -uroot -p1234 或者mysql -uroot -p ---- 登录(2)exit或者quit ---- 退出 3 远程登录服务器上的MySQL命令mysql -hip地址 -P3306 -…...

C++初阶—类与对象(中篇)

第一章:类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现&a…...

Leetcode15. 三数之和(HOT100)

链接 一般这种三数之和,四数之和都使用双指针,复杂度最优,次一级可使用哈希表。前者要求有序,后者空间上有花费。 题目: 题目要求答案中不能出现重复vector,比如{-1 1 0}和{-1 0 1}; 这两个…...

Oracle数据库小白备忘

sqlplus相关 导入sql文件 在sqlplus中,导入一个sql文件,是使用或者start。 如当前目录下有一个hello.sql,则可以使用 hello.sql 或者 start hello.sql 来进行导入,功能类似于mysql里面的source。 退出编辑模式 当使用sqlplus…...

DDR4与DDR3服务器内存的关键区别有哪些?

内存作为服务器性能的关键组件之一,已经经历了从DDR3到DDR4的过渡。DDR4内存相较于DDR3在多个方面有所提升,包括速度、带宽、功耗以及数据传输效率等。然而,尽管DDR4内存在性能上占有优势,DDR3内存依然在一些特定场景中得到了广泛…...

Linux: shell: bash: set -x;调试使用

man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...

Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署

文章目录 前言一、Hbase伪分布式部署(手动部署)1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.jar…...

自定义指令,全局,局部,注册

让输入框自动获取焦点(每次刷新自动获取焦点&#xff09; <template><div><h3>自定义指令</h3><input ref"inp" type"text"></div> </template><script> export default {mounted(){this.$refs.inp.focus…...

静坐修心.

文章目录 打坐的历史文化渊源东方的起源与传承西方的接受与演变现代生活中的打坐 盘腿坐对身体的影响促进脊椎健康改善呼吸系统功能增强消化系统机能改善血液循环调节神经系统错误姿势及其他潜在危害 盘腿坐对心理的作用促进内心平静与放松提升自我觉察与内在探索培养专注力与精…...

设计模式c++(一)

文章目录 一、面向对象设计原则二、模版方法三、策略模式四、观察者模式五、装饰模式六、桥模式七、工厂方法_Factory Method八、抽象工厂_Abstract Factory九、原型模式十、构建器_builder十一、单件模式_Singleton十二、享元模式_Flyweight 一、面向对象设计原则 设计模式的…...

核密度估计——从直方图到核密度(核函数)估计_带宽选择

参考 核密度估计&#xff08;KDE&#xff09;原理及实现-CSDN博客 机器学习算法&#xff08;二十一&#xff09;&#xff1a;核密度估计 Kernel Density Estimation(KDE)_算法_意念回复-GitCode 开源社区 引言 在统计学中&#xff0c;概率密度估计是一种重要的方法&#xff0…...

Vant UI Axure移动端元件库:提升移动端原型设计效率

UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI&#xff0c;作为一款基于Vue.js的轻量、可靠的移动端组件库&#xff0c;自2017年开源以来&#xff0c;凭借其丰富的组件库、良好的性能以及广泛的兼容性&#xff0c;在移动端开发领域崭露头角&#xff0c;赢得了众多开…...

如何用 JavaScript 操作 DOM 元素?

如何用 JavaScript 操作 DOM 元素&#xff1f;——结合实际项目代码示例讲解 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;操作是与页面交互的核心。通过 DOM 操作&#xff0c;开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...

【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理

1、简述 URDC是Ubuntu远程桌面助手的简称。 它可以: 实时显示桌面:URDC支持通过Windows连接至Ubuntu设备(包括x86和ARM架构,例如Jetson系列、树莓派等)的桌面及光标。远程操控双向同步剪切板多客户端连接:同一Ubuntu设备最多可同时被三台Windows客户端连接和操控,适用于…...

ES-DSL查询

term查询 因为精确查询的字段搜是不分词的字段&#xff0c;因此查询的条件也必须是不分词的词条。查询时&#xff0c;用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多&#xff0c;反而搜索不到数据。 语法说明&#xff1a; // term查询 GET /index…...

npm 设置镜像

要在npm中设置镜像&#xff0c;你可以使用npm config命令。以下是设置npm镜像的步骤&#xff1a; 临时使用淘宝镜像&#xff1a; npm --registry https://registry.npmmirror.com install package-name 永久设置镜像&#xff1a; npm config set registry https://registry…...

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…...

STM32G4系列MCU双ADC多通道数据转换的应用

目录 概述 1 STM32Cube配置项目 1.1 基本参数配置 1.1.1 ADC1参数配置 1.1.2 ADC2参数配置 1.2 项目软件架构 2 功能实现 2.1 ADC转换初始化 2.2 ADC数据组包 3 测试函数 3.1 Vofa数据接口 3.2 输入数据 4 测试 4.1 ADC1 通道测试 4.2 ADC2 通道测试 概述 本文…...

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果&#xff0c;然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了&#xff01;这个 5 天 这个工具是一个音频文件格式转换工具&#xff0c;支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…...

Java并发编程:CompletableFuture实战

Java并发编程&#xff1a;CompletableFuture实战 引言 Java 8引入的CompletableFuture是现代异步编程的重要工具&#xff0c;它不仅解决了Future的局限性&#xff0c;还提供了丰富的API用于组合、转换和处理异步结果。相比传统的Future&#xff0c;CompletableFuture支持流式调…...

3步实现专业级AI换脸:roop-unleashed创新方案指南

3步实现专业级AI换脸&#xff1a;roop-unleashed创新方案指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意飞速发展的今天&#xff0c;AI换脸…...

怎样免费让老Mac重获新生:OpenCore Legacy Patcher专业教程

怎样免费让老Mac重获新生&#xff1a;OpenCore Legacy Patcher专业教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让你的旧Mac重新焕发活力吗&#xf…...

基于大语言模型的本地语义搜索工具LLocalSearch部署与应用指南

1. 项目概述&#xff1a;一个能“读懂”你电脑的本地搜索工具 如果你和我一样&#xff0c;电脑里塞满了各种文档、邮件、聊天记录和代码片段&#xff0c;那么“找东西”这件事&#xff0c;绝对能排进日常最耗时的任务前三。传统的文件搜索&#xff0c;比如Windows自带的搜索或者…...

3分钟完成30分钟任务:词达人自动化助手终极指南

3分钟完成30分钟任务&#xff1a;词达人自动化助手终极指南 【免费下载链接】cdr 微信词达人&#xff0c;高正确率&#xff0c;高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 你是否厌倦了每周在词达人平台上花费数小时完成枯燥的…...

2026生鲜店收银软件特点功能对比

每天傍晚高峰期&#xff0c;生鲜店门口排起的长队总是让店主心头一紧。顾客手里拿着刚挑好的蔬菜水果&#xff0c;眼神里透着急切&#xff0c;而收银台前的店员却还在手忙脚乱地查找商品代码、手动输入重量&#xff0c;甚至因为系统卡顿导致支付失败。这种场景不仅流失了潜在客…...

基于Electron的ChatGPT桌面客户端开发:架构、功能与进阶实践

1. 项目概述&#xff1a;一个开源桌面客户端的诞生与价值如果你和我一样&#xff0c;在日常开发、写作或者处理一些需要深度思考的任务时&#xff0c;经常需要和ChatGPT这样的AI助手对话&#xff0c;那你一定对在浏览器里反复切换标签页、刷新页面、管理冗长的对话历史感到厌烦…...

OpenClaw-Subcortex:轻量级自动化任务编排与执行框架详解

1. 项目概述与核心价值最近在折腾一些自动化工具&#xff0c;发现一个挺有意思的项目叫openclaw-subcortex。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;又是“爪子”又是“皮层下”的&#xff0c;感觉像是什么生物或者神经科学的东西。但实际上&#xff0c;这是…...

MCP服务器生产级部署:从Docker到Kubernetes的完整工程化实践

1. 项目概述&#xff1a;一个为MCP服务器量身定制的部署蓝图如果你正在开发或使用一个基于模型上下文协议&#xff08;Model Context Protocol&#xff0c; MCP&#xff09;的服务器&#xff0c;并且为如何将其优雅、可靠地部署到生产环境而头疼&#xff0c;那么你很可能需要的…...

Agent 的记忆也会被投毒:长期记忆安全的六阶段框架

过去&#xff0c;我们更习惯把大模型的风险理解为“这一轮输入有没有问题”“这一轮输出会不会越界”。但有了长期记忆之后&#xff0c;风险结构发生了变化。恶意内容不一定在当场触发&#xff0c;也不一定在同一轮任务里显现出来。它可以先悄悄进入记忆&#xff0c;在几天后、…...