[英]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()的数据集,其具有加载图像dtype
的float32
和值从0-1的范围内用其使用的OpenCV工作dtype
的uint8
从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.