python - 如何调整图像大小但保留图像中的特征?Python
问题描述
array.resize(20,20,3)
img = Image.fromarray(array, 'RGB')
img.save('my.png',quality=90)
img.show()
它目前是一个 500x500x3 的 NumPy 数组。底层空间是一个 20x20 的单元格网格,我想调整图像的大小,以便每个网格单元格在 20x20x3 NumPy 数组中都有与其 RGB 值相对应的条目,而不是 (500/20)*(500/20)*3 个条目细胞。
不幸的是,上面的代码似乎不起作用,因为它似乎给每个单元格提供了比我预期的更多的条目,尽管我不是 100% 确定。
解决方案
要调整图像大小,pillow
可以使用Image.resize()
from PIL import Image
import urllib.request
import numpy as np
data = urllib.request.urlopen('https://i.stack.imgur.com/7bPlZ.png')
old_img = Image.open(data)
new_img = old_img.resize((20, 20))
new_img.save('my.png',quality=90)
new_img.show()
array = np.array(new_img)
print(array)
但是调整图像大小可以创建带有半色调的像素。
也许你应该直接从numpy.array
. 您有纯色,因此您可以从每个单元格中获取单个像素 - 因为每个单元格都有大小25x25
,所以它可能是:
new_array = old_array[::25,::25,:]
然后您不必转换为图像。
如果您将此数组转换为图像,那么它应该比 create with 更清晰Image.resize
。
from PIL import Image
import urllib.request
import numpy as np
data = urllib.request.urlopen('https://i.stack.imgur.com/7bPlZ.png')
old_img = Image.open(data)
old_array = np.array(old_img)
new_array = array[::25,::25,:]
print(new_array)
new_img = Image.fromarray(new_array)
new_img.save('my.png',quality=90)
new_img.show()
推荐阅读
- angular - Angular Reactive Form - 如何将订阅 valueChanges 添加到表单数组中的表单控件内的单个控件
- ios - SideMenu Jonkykong sideMenuDidAppear 和 sideMenuDidDisappear 委托未触发
- python - 在python中获取二进制整数作为输入
- kubernetes - Kubernetes:如何通过 jdbc 从本地 vm 连接到 k8s 中的 postgresql 数据库
- javascript - 如何验证 Javascript 中文本 oninput() 的 00-00-00-0000 格式
- hyperledger-fabric - 在 Hyperledger Fabric 1.4.3 上更改共识类型时无法提交通道更新
- c# - HTTP 错误 404.0 - 未找到 - MVC 属性路由
- ubuntu - 启动 Grafana-server 总是给我 bind: address already in use 即使我更改端口
- angular - Angular Service Worker 未在系统 IP 地址上运行
- ios13 - 断言当前回退特征集合包含一个或多个未指定的特征: