繁体   English   中英

python从3个float32 numpy数组中生成RGB图像

[英]python make RGB image from 3 float32 numpy arrays

我有3个阵列,400x600,代表我想要制作的图像的3种颜色。

我在这里找到了一个潜在的方法: http//docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.misc.imsave.html但他们希望我将浮动转换为uint8。 现在,如果我通过'image.dtype = np.uint8'更改dtype,则以某种方式将维度更改为400x600x24(而当我不更改类型时,它是400x600x3)

我该如何改变? (其他方法也欢迎)

image.dtype = np.uint8只是强制将字节从float64转换为uint8 由于每个float64需要8个字节,而每个uint8只有1个字节,因此您得到的值是8倍。

要转换值,而不是重新解释字节,您需要astype方法:

image = image.astype(np.uint8)

但是,由于两个原因,这可能不会非常有用。 首先,大的,你的浮动值可能都在0.0-1.0范围内。 其次, astype截断,而不是舍入。 因此,转换为整数只会使它们几乎全部为0,其余为1,而不是平滑范围为0-255。

那么,你可能想要的是:

image = (image * 255).round().astype(np.uint8)

谢谢@abarnert! 这正是我搜索从像sklearn.datasets.fetch_olivetti_faces()的数据集,其具有加载图像dtypefloat32和值从0-1的范围内用其使用的OpenCV工作dtypeuint8从0-和值255。

import numpy as np
import cv2 as cv
from sklearn import datasets

data = datasets.fetch_olivetti_faces()
image = data.images[15]
image

阵列[([0.6694215,0.6818182,0.7066116,...,0.5082645,0.55785125,0.58677685],[0.677686,0.70247936,0.71487606,...,0.5289256,0.5495868,0.58264464],[0.6983471,0.7107438,0.70247936,..., 0.5495868,0.55785125,0.5785124],...,[0.59917355,0.59917355,0.54545456,...,0.10743801,0.11157025,0.10330579],[0.59090906,0.6198347,0.5785124,...,0.11157025,0.10743801,0.10743801],[0.5661157, 0.6280992,0.59917355,...,0.11157025,0.11157025,0.10743801]],dtype = float32)

img = (image * 255).round().astype(np.uint8)
img

数组[(171,174,180,...,130,142,150],[173,179,182,...,135,140,​​149],[178,181,179,..., 140,142,148],......,[153,153,139,...,27,28,26],[151,158,148,...,28,27,27],[144, 160,153,...,28,28,27]],dtype = uint8)

img现在可以在cv库中进一步处理了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM