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
方法理解两种模式:三通道(彩色线)或非三通道(灰度线)。就是这样。
结果是,在您的情况下,所有四个通道都写入了相同的值。黑线应保持不可见,而白线或蓝线应以白线结束。
感谢 Mark Setchell,我找到了一个可行的解决方案。在 cv2.line()
中的 color
参数中,传递一个元组,其中前三个值是 BGR 颜色。第四个值是 transparency/alpha。因此,如果您想在透明图像上绘制,您的代码应该类似于 cv2.line(color=(0, 0, 200, 255)) # etc
。
我正在制作一个绘图程序,您可以稍后将更改保存并导出为图像。非透明图像选项效果很好,但透明选项则不然。我现在拥有的代码基于
每当我在透明选项中画一条线时,图像上什么也没有显示。完全透明
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
方法理解两种模式:三通道(彩色线)或非三通道(灰度线)。就是这样。
结果是,在您的情况下,所有四个通道都写入了相同的值。黑线应保持不可见,而白线或蓝线应以白线结束。
感谢 Mark Setchell,我找到了一个可行的解决方案。在 cv2.line()
中的 color
参数中,传递一个元组,其中前三个值是 BGR 颜色。第四个值是 transparency/alpha。因此,如果您想在透明图像上绘制,您的代码应该类似于 cv2.line(color=(0, 0, 200, 255)) # etc
。