问题描述
我正在尝试在 Numpy 中创建一个 空白的彩色图像,其中包含一个 alpha 通道 (RGBA)。
为了找出如何做到这一点,我来到了this SO answer。但是,当我运行 SO 答案的任一示例时,红色 显示为蓝色,这与答案中显示的图像不同。
所以,我想知道这样做的正确方法是作为uint16
(而不是uint8
)并且没有颜色混合强>?这是 Numpy 的错误还是我做错了什么?
我得到的图像: https://i.ibb.co/VVxhDwY/img.png
我的代码:
import cv2
import numpy as np
size = (128,256)
blank_image = np.zeros((size[0],size[1],4),np.uint8)
# Make first 10 rows red and opaque
blank_image[:10] = [255,255]
# Make first 10 columns green and opaque
blank_image[:,:10] = [0,255,255]
cv2.imwrite('test.png',blank_image)
解决方法
如果您使用 cv2
而不是 matplotlib.pyplot
,您的代码运行得很好(见下文),然后您可以简单地将它存储在这个库中。
您链接到的答案是使用 PIL/Pillow(使用传统的 RGB 排序)而不是 OpenCV(使用 BGR 排序)。如果您想使用 OpenCV 获得 16 位半透明纯红色,请使用:
#!/usr/bin/env python3
import cv2
import numpy as np
size = (128,256)
# Make semi-transparent solid red image
im = np.zeros((*size,4),np.uint16) + [0,65535,128]
# Save to disk
cv2.imwrite('result.png',im)