我有一个 rgba 格式的图像,其中包含 (0,0,0) 个黑色,我想将这些 (0,0,0) 像素中的每一个都转换为透明。图像已经有一个 alpha 通道,我不知道如何为一个像素激活 alpha 通道。我尝试将 alpha 通道值设置为 0,但到目前为止还没有奏效:
for y in range(len(blur)):
for x in range(len(blur[0])):
if blur[y][x][0] == 0 and blur[y][x][1] == 0 and blur[y][x][2] == 0:
blur[y][x][3] = 0
Run Code Online (Sandbox Code Playgroud)
另外,如何使用 numpy 来优化这个嵌套的 for 循环?
它可能只是显示问题,但很难从您的代码示例中分辨出来。
cv2.imshow不支持透明。
将结果存储到 PNG 图像文件,并使用显示透明度的查看器查看图像。(使用GIMP或paint.net,很容易查看透明像素)。
下面的代码示例执行以下操作:
这是代码:
import cv2
import numpy as np
# Read image in BGR format
img = cv2.imread('chelsea.png')
# Write cat in in black color
cv2.putText(img, 'cat', (img.shape[1]//2-85*len('cat'), img.shape[0]//2+100), cv2.FONT_HERSHEY_DUPLEX, 10, (0, 0, 0), 20)
# Coinvert from BGR to BGRA
bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
# Slice of alpha channel
alpha = bgra[:, :, 3]
# Use logical indexing to set alpha channel to 0 where BGR=0
alpha[np.all(bgra[:, :, 0:3] == (0, 0, 0), 2)] = 0
# Save bgra to PNG file
cv2.imwrite('bgra.png', bgra)
# Show image for testing
cv2.imshow('img', img)
cv2.imshow('bgra', bgra) # The letters are black, because cv2.imshow does not support transparency.
cv2.imshow('bgra[:,:,3]', bgra[:,:,3])
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
结果:
网站背景为白色,所以透明像素为白色...
| 归档时间: |
|
| 查看次数: |
1513 次 |
| 最近记录: |