如何从uint8原始图像数据数组创建uint16 numpy数组

问题描述 投票:0回答:1

当与USB摄像头连接并抓取图像数据时,我遇到了将数据保存为16位的问题。我将相机像素格式设置为Mono16,但每当我将原始图像数据保存到numpy数组时,数组默认为uint8数据类型。我注意到从Mono8切换到Mono16时原始数据阵列的大小翻了一番。我已经研究过numpy as_strided,但仍然没有解决问题。这是一段代码,以帮助显示情况的基本示例。

>>>c.startCapture()
>>>fireSoftwareTrigger()
>>>im = c.retrieveBuffer()
>>>c.stopCapture()
>>>cols = im.getCols()
>>>cols
964
>>>rows = im.getRows()
>>>rows
724
>>>data = numpy.array(im.getData())
>>>len(data)
1395872
>>>rows*cols
697936
>>>data.dtype
dtype('uint8')
python numpy image-processing
1个回答
0
投票

您可以使用视图转换。请注意,视图转换重新解释数据缓冲区而不实际修改它,因此它很便宜。

data = numpy.array(im.getData()).view(numpy.uint16)

如果数据的字节顺序与机器的本机顺序匹配。

否则你需要使用其中一个

data = numpy.array(im.getData()).view('<u2')
data = numpy.array(im.getData()).view('>u2')

dtype规范字符串中的'>' / '<'代表大/小端。 'u'表示unsigned int,'2'表示两个字节。

© www.soinside.com 2019 - 2024. All rights reserved.