如何在 numpy (RGBA) 中正确创建空白彩色图像

问题描述

我正在尝试在 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,您的代码运行得很好(见下文),然后您可以简单地将它存储在这个库中。

Example of your code

,

您链接到的答案是使用 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)

enter image description here