【发布时间】:2020-12-21 17:54:06
【问题描述】:
我正在尝试在 Numpy 中创建一个包含 Alpha 通道 (RGBA) 的空白彩色图像。
为了了解如何做到这一点,我来到this SO answer。但是,当我运行 SO 答案的任一示例时,red 显示为 blue,与答案中显示的图像不同。
所以,我想知道这样做的正确方法是作为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,0,0,255]
# Make first 10 columns green and opaque
blank_image[:,:10] = [0,255,0,255]
cv2.imwrite('test.png', blank_image)
【问题讨论】:
-
OpenCV 使用 BGR 排序。所有其他套件都使用 RGB - 包括我在链接答案中使用的 PIL。您需要用 OpenCV 交换红色和蓝色。如果你想要 16 位,你需要使用 65,535 而不是 255。你需要使用
np.uint16。 -
@MarkSetchell 感谢您指出这一点。我明白 cv2 使用了一个非常奇怪的顺序。但是,我不明白的是,在另一个 SO 答案中,它似乎正确显示。保存前需要转换图片RGBA->BGRA吗?
-
好吧,有道理,我会尝试翻转红色和蓝色。
-
另外,我要提到我的问题更多地与如何创建空白的彩色 RGBA 图像(尽管这很有帮助)有关。目前,我只是在寻找半透明的红色图像。
-
将
[0,0,255,128]用于 OpenCV 的半透明红色。