gpt4 book ai didi

python - 转换为 uint8 时 CV2 不显示颜色

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:50 25 4
gpt4 key购买 nike

我有一个 python 列表,其中包含表示为 int32 的 PNG 图像的 RGBA 数据,它是从 Java 套接字服务器发送过来的。

此数据作为 numpy 数组的示例输出,没有任何转换:

[[-12763847 -12763847 -12763847 ...  -5590160 -12039396 -12434915]
[-12763847 -12763847 -12763847 ... -6643102 -12828909 -12830184]
[-12763847 -12763847 -12763847 ... -8419763 -13487094 -12435167]]

CV2 当然接受 uint8 作为数据类型(显示为 int32 显示黑屏),因此我将我的列表转换为带有 dtype = np.uint8 的 numpy 数组,如下所示:

image_data = np.array(data_list, dtype = np.uint8)

此示例输出:

[[ 57  57  57 ... 112  28  29]
[ 57 57 57 ... 98 19 24]
[ 57 57 57 ... 77 10 33]]

但是,当我使用

显示图像时
cv2.imshow("Image", image_data)

我得到一个显示图像的窗口,但是是灰度的;它没有颜色。

如何防止颜色被忽略?

最佳答案

希望这能帮助您了解如何从 32 位值中提取红色、绿色和蓝色 channel 。我从你数组的第一行开始。

im=np.array([-12763847,-12763847,-12763847,-5590160,-12039396,-12434915],dtype=np.int32)

R = ((im & 0xff).astype(np.uint8)
# array([ 57, 57, 57, 112, 28, 29], dtype=uint8)

G = ((im>>8) & 0xff).astype(np.uint8)
# array([ 61, 61, 61, 179, 75, 66], dtype=uint8)

B = ((im>>16) & 0xff).astype(np.uint8)
# array([ 61, 61, 61, 170, 72, 66], dtype=uint8)

如果这些值看起来正确,您应该能够将它们合并到彩色图像中:

img = cv2.merge((B,G,R))

请记住,OpenCV 使用 BGR channel 顺序而不是更传统的 RGB


您的 32 位数字中的字节顺序可能与我上面猜测的不同。最简单的测试方法是在相机前放一张红卡,看看有什么通过,然后是绿卡,然后是蓝卡。四个 channel (R,G,B,A) 应由以下给出,但这可能是实验的问题:

(im    ) & 0xff
(im>>8 ) & 0xff
(im>>16) & 0xff
(im>>24) & 0xff

关于python - 转换为 uint8 时 CV2 不显示颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53348215/

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