Nek*_*eko 7 python png opencv image python-3.x
我正在用 Python 学习 OpenCV。我试图以 PNG 格式更改图片的颜色,但我遇到了 PNG 背景的一些问题(图像具有透明背景)。
当我将其更改为灰度时,背景已更改为黑色——我的图片不再透明。我想要的是保持图片的透明背景。
原图:
我的代码:
img = cv2.imread('line.png',cv2.IMREAD_UNCHANGED)
cv2.imshow('line',img)
cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)
输出图像:
期望的输出:
边框图像周围的白色应该是透明的。我怎么能做到这一点?
首先,让我提一下,如果您使用 alpha 透明度显示图像,cv2.imshow
那么透明区域将是黑色的。
由于您的输入图像已经包含一个 alpha 通道,解决方案很简单——只需重用 alpha 通道。
有一个小问题——即使 PNG 格式允许具有 alpha 通道的灰度,AFAIK 也无法用 OpenCV 编写这样的图像。
因此解决方案很简单:将处理后的灰度图像转换回 BGR,添加原始 alpha 通道,并保存结果。
由于我们在 Python 中,因此图像表示为一个 numpy 数组,我们可以使用数组索引来提取我们需要的通道。numpy.dstack
允许我们轻松添加 alpha 通道。
示例代码:
import cv2
import numpy as np
src = cv2.imread('51IgH.png', cv2.IMREAD_UNCHANGED)
bgr = src[:,:,:3] # Channels 0..2
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
# Some sort of processing...
bgr = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
alpha = src[:,:,3] # Channel 3
result = np.dstack([bgr, alpha]) # Add the alpha channel
cv2.imwrite('51IgH_result.png', result)
Run Code Online (Sandbox Code Playgroud)
结果:
再一次在不同的背景上,所以你可以看到它真的很透明:
归档时间: |
|
查看次数: |
13522 次 |
最近记录: |