gpt4 book ai didi

python - 如何在opencv中使某些像素透明?

转载 作者:行者123 更新时间:2023-12-02 02:49:09 25 4
gpt4 key购买 nike

我用 for 语句检查了每个像素的亮度,并尝试在亮度超过 100 时使其透明。但隐形不起作用。

看代码,image_al[x,y]的第四个是alpha。我应该怎么办?(如果你使用 bgr 的值而不是透明度,它就会改变。)


image = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)

image_al=cv2.cvtColor(image,cv2.COLOR_BGR2BGRA)
image_hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
for x in range(image_al.shape[0]):
for y in range(image_al.shape[1]):
px=image_hsv[x,y]
print(px)
if px[2]>100:
px=image_al[x,y]
image_al[x, y]=[px[0],px[1],px[2],255] #image_al[x, y]=[b,g,r,alpha]
cv2.imshow('image2',image_al)
cv2.waitKey(0)

开发环境:PyCharm、Windows

最佳答案

在 Python 中处理图像时尽量避免 for 循环 - 它们非常慢、效率低且难以阅读。 Numpy 和 OpenCV 是矢量化的 - 它们在优化的 C 中处理整个图像并且速度很快。

因此,您可以转换为 HSV 并提取 V channel ,然后简单地对其进行阈值处理并将其合并为 alpha 层:

import cv2
import numpy as np

# Load Image
im = cv2.imread('temple.jpg')

# Convert to HSV and take V channel
V = cv2.cvtColor(im,cv2.COLOR_BGR2HSV)[...,2]

# Threshold V channel at 100 to make alpha channel (A)
_, A = cv2.threshold(V,100,255,cv2.THRESH_BINARY)

# Stack A channel onto RGB channels
result = np.dstack((im,A))

# Save result
cv2.imwrite('result.png',result)

enter image description here

Photo作者:CEphoto, Uwe Aranas 或 © CEphoto, Uwe AranasCC BY-SA 3.0

结果

enter image description here

如果您希望明亮像素透明,请更改为:

_, A = cv2.threshold(V,100,255,cv2.THRESH_BINARY_INV) 

那么结果将是:

enter image description here

关键字:Python、图像处理、HSV、色相饱和度和值、添加 Alpha channel 、合并 Alpha channel 、创建 Alpha channel 、OpenCV

关于python - 如何在opencv中使某些像素透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59442860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com