【OpenCV学习笔记4】基础:几何变换-改变大小

news/2025/2/26 8:59:57

文章目录

    • 1. 按比例缩小
    • 2. 放大
    • 3. 只更改高或宽
    • 4. 缩放到指定大小
    • References

1. 按比例缩小

我们使用 resize 函数改变图像大小,例如将图像按比例缩小为原来的80%:

import cv2

img = cv2.imread('images/test.jpg')

width = img.shape[1]
height = img.shape[0]

scale = 80
newHeight = int(height * 80 / 100)
newWidth = int(width * 80 / 100)

imgResized = cv2.resize(img, (newWidth, newHeight))
cv2.imshow('Resized', imgResized)
cv2.waitKey(0)

在这里插入图片描述

resize 函数第一个参数是原图像,第二个参数是高和宽组成的 tuple。

2. 放大

我们还可以对图像进行放大:

import cv2

img = cv2.imread('images/test.jpg')

width = img.shape[1]
height = img.shape[0]

scale = 120
newHeight = int(height * scale / 100)
newWidth = int(width * scale / 100)

imgResized = cv2.resize(img, (newWidth, newHeight), interpolation=cv2.INTER_AREA)
cv2.imshow('Upscale', imgResized)
cv2.waitKey(0)

在这里插入图片描述

这里在调用 resize 函数时指定了一个参数 interpolation ,也就是指定 resize 函数的插值方式,有如下几种:

  • INTER_NEAREST – a nearest-neighbor interpolation(最邻近插值)
  • INTER_LINEAR – a bilinear interpolation(双线性插值,这是默认的方法)
  • INTER_AREA – resampling using pixel area relation(基于局部像素的重采样)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
  • INTER_CUBIC – a bicubic interpolation over 4×4 pixel neighborhood(4x4 双三次插值法)
  • INTER_LANCZOS4 – a Lanczos interpolation over 8×8 pixel neighborhood(8x8 多相位图像插值法)

3. 只更改高或宽

可以只更改高或宽,例如只更改高度,采用 INTER_AREA 插值:

import cv2

img = cv2.imread('images/test.jpg')

width = img.shape[1]
height = img.shape[0]

scale = 80
newHeight = int(height * scale / 100)

imgResized = cv2.resize(img, (width, newHeight), interpolation=cv2.INTER_AREA)
cv2.imshow('Resize Height', imgResized)
cv2.waitKey(0)

在这里插入图片描述

4. 缩放到指定大小

可以直接指定大小(像素值),如 300x100:

import cv2

img = cv2.imread('images/test.jpg')

imgResized = cv2.resize(img, (300, 100), interpolation=cv2.INTER_AREA)
cv2.imshow('Resize Specific', imgResized)
cv2.waitKey(0)

在这里插入图片描述


References

  1. OpenCV Doc: Geometric Image Transformations
  2. OpenCV里的INTER_AREA究竟是在做啥?
  3. OpenCV Python – Resize image

QQ交流群:点击链接加入群聊【Python练习生】532232743
我的知乎:AXin啊
公众号:请叫我AXin
在这里插入图片描述


http://www.niftyadmin.cn/n/712466.html

相关文章

python generator iterator_深入浅出地解读Python迭代器和生成器

原标题:深入浅出地解读Python迭代器和生成器作者:浪子燕青原文:http://www.langzi.fun/迭代器与生成器.html大家好,欢迎来到 Crossin的编程教室 !迭代器和生成器是Python很重要的进阶语法。虽然在一开始的学习中&#…

arcgis api 3.x for js 解决 textSymbol 文本换行显示(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学…

Gartner 2017 顶级信息安全技术

云工作负载保护平台现代数据中心支持运行在物理设备、虚拟机、容器、私有云基础设施中的各种工作负载,并且几乎总是涉及一个或者多个公有云基础设施及服务(IaaS)提供商。混合云工作负载保护平台(CWPP)为信息安全负责人…

Java——实现简单的ATM银行管理系统(很简单,无GUI)

1.开篇 最近一直在准备2020年下半年的软考中级——软件设计师考试,不知不觉已经有10天没有学Java了,今天心血来潮,想着写点什么Java小程序练练手,只当是复习一下前段时间自学的有关Java类对象这块的知识!!…

第六章 函数和宏定义实验(2)

C程序设计实验报告 实验项目: 1、利用复化梯形公式计算定积分2、计算Ackerman函数3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出4、编写计算学生年龄的递归函数5、编写递归函数实现Ackman函数 姓名: 刘健斌…

易语言关闭指定窗口_电脑控制手机 易语言也可以实现颜色比较功能哦

手机多控系统,脚本是其非常强大的功能,如果多控软件是个平台提供舞台,那么脚本绝对是这个舞台上最出色的表演者,能用自己的各种表演带给你各种享受。Total Control作为安卓手机的多控系统,通过脚本实现识别颜色是其强大…

Java——实现简单的学生信息管理系统(很简单,无GUI)

1.开篇 这篇博文也是博主复习一下之前学过的 Java 的相关内容,通过使用 Java中的类、对象、构造器、set和get方法、接口、重写、集合(泛型)等一些相对来说不算太难的知识,来实现一个简易的学生信息管理系统。我写的真的很水&…

浙江使用RFID技术,管理内河船只

RFID电子船名牌是将RFID(射频识别技术)融入船名牌中,并将电子标签ID码、船舶识别码、船名、船舶类型、总吨等主要参数直接固化在RFID卡中,通过读头或手持终端即可读到在航船舶信息,并可自动将数据采集到省港航智能感知平台中与后台系统进行比…