当前位置: 首页 > 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插值法获得的图像清晰度最好。

 

 

 

 

http://www.lryc.cn/news/499546.html

相关文章:

  • 1 数据库(上):MySQL的概述和安装、SQL简介、IDEA连接数据库使用图形化界面
  • C++初阶—类与对象(中篇)
  • Leetcode15. 三数之和(HOT100)
  • Oracle数据库小白备忘
  • DDR4与DDR3服务器内存的关键区别有哪些?
  • Linux: shell: bash: set -x;调试使用
  • Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署
  • 自定义指令,全局,局部,注册
  • 静坐修心.
  • 设计模式c++(一)
  • 核密度估计——从直方图到核密度(核函数)估计_带宽选择
  • Vant UI Axure移动端元件库:提升移动端原型设计效率
  • 如何用 JavaScript 操作 DOM 元素?
  • 【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理
  • ES-DSL查询
  • npm 设置镜像
  • SpringMvc完整知识点一
  • STM32G4系列MCU双ADC多通道数据转换的应用
  • 【工具】音频文件格式转换工具
  • ssl证书过期,nginx更换证书以后仍然显示过期证书
  • 原型模式(Prototype Pattern)——对象克隆、深克隆与浅克隆及适用场景
  • 从工标网网站解析标准信息
  • 如何在MySQL中开启死锁日志及查看日志
  • VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation
  • 分类算法中的样本不平衡问题及其解决方案
  • 博物馆导览系统方案(一)背景需求分析与核心技术实现
  • [创业之路-169]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -1- 看宏观/行业 - 行业:激光器行业的详细分析
  • 抽象工厂模式的理解和实践
  • WIDER FACE数据集转YOLO格式
  • 项目启动的基本配置