gpt4 book ai didi

python - 在 Python 中将单个整数像素数组转换为 RGB 三元组

转载 作者:太空狗 更新时间:2023-10-29 21:34:45 25 4
gpt4 key购买 nike

我正在玩弄使用 Micro-Manager 1.4 的显微镜相机。使用 Python 接口(interface),我已经设法访问相机、更改曝光时间等,并且我可以捕获单个图像。

但是,每个图像都以 NumPy 数组的形式返回,其中每个像素都表示为单个整数,例如“7765869”。据我在网上找到的,这在 Java 中被称为“BufferedImage”,这意味着 RGB 值被编码为:

BufferedImage = R * 2^16 + G * 2^8 + B

我的问题是:我怎样才能使用例如Numpy 或 OpenCV,将这种数组转换为更方便的数组,其中每个像素都是 uint8 值的 RGB 三元组?不用说,转换应该尽可能高效。

最佳答案

最简单的方法是让 numpy 为您进行转换。您的 numpy 数组可能是 np.uint32 类型。如果将其视为 np.uint8 的数组,您将得到一个 RGB0 格式的图像,即每个像素的 R、G 和 B 值,加上一个空的 np.uint8 以下。 reshape 和丢弃零值很容易:

>>> img = np.array([7765869, 16777215], dtype=np.uint32)
>>> img.view(np.uint8)
array([109, 127, 118, 0, 255, 255, 255, 0], dtype=uint8)
>>> img.view(np.uint8).reshape(img.shape+(4,))[..., :3]
array([[109, 127, 118],
[255, 255, 255]], dtype=uint8)

最好的事情是没有计算或复制数据,只是重新解释原始图像的内容:我认为没有比这更有效率的了!

我记得对于某些操作,OpenCV 需要一个连续的数组,因此您可能必须在该表达式的末尾添加 .copy() 才能真正摆脱零列,而不是简单地忽略它,尽管这当然会触发上面代码避免的数据副本。

关于python - 在 Python 中将单个整数像素数组转换为 RGB 三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com