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

numpy知识库:深入理解numpy.resize函数和数组的resize方法

前言

numpy中的resize函数顾名思义,可以用于调整数组的大小。但具体如何调整?数组形状变了,意味着数组中的元素个数发生了变化(增加或减少),如何确定resize后的新数组中每个元素的数值呢?本次博文就来探讨并试图回答这个问题,感兴趣的小伙伴可以继续阅读下去,希望对您有所启示~

numpy中的resize函数背后的机理

纯粹的文字说明不太直观,小编更倾向用代码工具进行直观展示。代码如下

import numpy as np
import cv2

img1 = np.zeros((256, 256), dtype=np.uint8) # 创建一个大小为256*256的全黑图像
for i in range(256):
    if i % 2 == 0: # 如果第i行是偶数行,则该行所有值设为255, 即全白,否则全黑;i从0开始
        img1[i, :] = 255
cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

结果如下:
在这里插入图片描述
可以看出,利用代码生成的图片是黑白相间分布的灰度图像,图像大小为256×256。
如果此时用numpy中的resize函数将上图调整成大小为256×512的新图像,那么新图像会长成什么样呢?还是黑白相间分布吗?

代码如下:

import numpy as np
import cv2

img1 = np.zeros((256, 256), dtype=np.uint8) # 创建一个大小为256*256的全黑图像
for i in range(256):
    if i % 2 == 0: # 如果第i行是偶数行,则该行所有值设为255, 即全白,否则全黑;i从0开始
    
img1 = np.resize(img1, (256, 512)) # 调整图像大小

cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

运行结果如下:
在这里插入图片描述

结果竟然是左白右黑(有没有出乎你的意料呢?有的话可以点个赞支持一下~)

背后的机理解读

利用numpy的resize函数从黑白相间分布的大小为256×256的原图调整为256×512的新图像后,竟然呈现出左白右黑的现象。咋一看,似乎摸不着头脑,其实背后的机理很简单。
机理:当新图像的大小确定后,就把原图的像素从左到右从上到下【依次填入】新图像。由于原图第一行全白,第二行全黑,而第一行像素和第二行像素之和恰好等于新图像第一行像素之和。以此类推,便会出现左白右黑的结果。

numpy的resize函数 vs numpy数组的resize方法

提到numpy的resize函数,就自然而然地会想到numpy数组的resize方法。同样是调整数组/图像的大小,两者的使用有何区别呢?还是那句话:show you the code!

区别一:numpy数组的resize方法是in-place操作

# numpy数组的resize方法
img1.resize((256, 512))  # numpy数组的resize方法是in-place操作,即直接在原数组/图像上修改,而numpy的resize函数需要返回一个新数组

区别二:numpy数组的resize方法在新数组大小>原数组时,直接填充0,并不继续填充原数组数值

# numpy数组的resize方法
img1.resize((256, 512))  # numpy数组的resize方法是in-place操作,即直接在原数组/图像上修改,而numpy的resize函数需要返回一个新数组
cv2.imshow('img1', img1)
cv2.waitKey(0) # 显示图像 延迟5秒退出窗口

结果如下:
在这里插入图片描述
容易发现,numpy数组的resize方法在填充完一遍原数据的数值后(上图的上半部分),剩余的数值直接填充0(上图的下半部分,即全黑)

如果本博文对你有所帮助,可以点个赞/收藏支持一下,如果能够持续关注,小编感激不尽~
小编会坚持创作,持续优化博文质量,以小见大,给读者带来更好地阅读体验~


http://www.kler.cn/a/152207.html

相关文章:

  • List系列集合
  • 道路病害检测数据集RDD2022的标签映射关系【参考自官网给出的label_map.pbtxt文件,附查看代码】
  • 华为云cce容器管理中的调度策略作用
  • 在Pycharm中创建项目新环境,安装Pytorch
  • Elasticsearch:对时间序列数据流进行降采样(downsampling)
  • 李宏毅2020机器学习课程笔记(二)- 深度学习
  • 建堆的时间复杂度和堆排序
  • (C++20) constinit常量初始化
  • 显示器校准软件BetterDisplay Pro mac中文版介绍
  • Java微服务框架 HP-SOA 1.0.5 — 完整支持 Spring Cloud 和 Dubbo
  • 常见智力题汇总
  • 游戏反Frida注入检测方案
  • 企业软件的分类|app小程序网站定制开发
  • Linux 命令pwd
  • vue.js ——Vuex
  • K8s 多租户方案的挑战与价值
  • 什么是 Proxy?
  • 98.套接字-Socket网络编程1(基础概念)
  • FPGA falsh相关知识总结
  • 【Linux】进程替换