OpenCV 画线不适用于透明图像

OpenCV draw line doesn't work on transparent image

我正在制作一个绘图程序,您可以稍后将更改保存并导出为图像。非透明图像选项效果很好,但透明选项则不然。我现在拥有的代码基于 .

每当我在透明选项中画一条线时,图像上什么也没有显示。完全透明

print("Transparent:", str(transparent))
    if not transparent:
        image = np.zeros((height, width, 3), np.uint8) # initialize image for saving preferences
        image[:] = backgroundColorBGR # change background color

        for drawing in drawings: # loop through each drawing
            cv2.line(image, drawing[0], drawing[1], drawing[2], thickness = drawing[3]) # create line that user drew
        cv2.imwrite("yourimage.png", image)
    else:
        
        image = np.zeros((height, width, 4), dtype = np.uint8) # 4 channels instead of 3, for transparent images

        for drawing in drawings: # loop through each drawing
            cv2.line(image, drawing[0], drawing[1], drawing[2], thickness = drawing[3])
        cv2.imwrite("yourimage.png", image)

OpenCV 绘图功能非常有限,仅用于图像中的简单标记。

他们不支持图像透明度的概念。例如,line 方法理解两种模式:三通道(彩色线)或非三通道(灰度线)。就是这样。

结果是,在您的情况下,所有四个通道都写入了相同的值。黑线应保持不可见,而白线或蓝线应以白线结束。

参考:Source code of the method

感谢 Mark Setchell,我找到了一个可行的解决方案。在 cv2.line() 中的 color 参数中,传递一个元组,其中前三个值是 BGR 颜色。第四个值是 transparency/alpha。因此,如果您想在透明图像上绘制,您的代码应该类似于 cv2.line(color=(0, 0, 200, 255)) # etc