我想将alpha通道设置为.jpg图像,并将其值设置为0.5或50%或128(总范围为0到1或0-255范围),并仅使用opencv和numpy将其保存为.png。我知道如何使用其他库来执行此操作,但是我们被要求仅使用两个库即导入cv2和导入numpy来执行上述问题。 我已经添加了Alpha通道,但我不知道如何将其值设置为50%的透明度,因为我是opencv-python的新手,请提供帮助。
我已经尝试过此代码,但是即使用油漆打开它也会得到黑色图像。
Reduce opacity of image using Opencv in Python
这就是我添加Alpha的方式
import cv2
import numpy as np
img = cv2.imread('food.jpg')
bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
print(bgra.shape)
答案 0 :(得分:5)
执行此操作的方法有多种...我将从这张图片开始:
使用OpenCV添加空白Alpha通道,并使用Numpy索引设置内容:
import cv2
import numpy as np
img = cv2.imread('paddington.jpg')
# Add alpha layer with OpenCV
bgra = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
# Set alpha layer semi-transparent with Numpy indexing, B=0, G=1, R=2, A=3
bgra[...,3] = 127
# Save result
cv2.imwrite('result.png',bgra)
或者,创建一个填充128的实心Alpha层,并使用Numpy dstack()
沿深度方向堆叠:
import cv2
import numpy as np
img = cv2.imread('paddington.jpg')
# Create solid alpha layer, same height and width as "img", filled with 128s
alpha = np.zeros([img.shape[0],img.shape[1],1], dtype=np.uint8) + 128
# Depth-wise stack that layer onto existing 3 RGB layers
bgra = np.dstack((img,alpha))
# Save result
cv2.imwrite('result.png',bgra)
或者,创建一个填充有128的实心alpha图层,然后使用OpenCV merge()
进行合并:
import cv2
import numpy as np
img = cv2.imread('paddington.jpg')
# Create solid alpha layer, same height and width as "img", filled with 128s
alpha = np.full_like(img[...,0], 128)
# Merge new alpha layer onto image with OpenCV "merge()"
bgra = cv2.merge((img,alpha))
# Save result
cv2.imwrite('result.png',bgra)
请注意,正如预期的那样,首先描述的OpenCV cvtColor()
方法最快,是手工优化的SIMD代码的十倍。具有给定图像的时间如下:
cv2.cvtColor()
-48微秒np.dstack()
-477微秒cv2.merge()
-489微秒关键字:Python,图像,图像处理,Numpy,OpenCV,dstack,merge,cvtColor,添加Alpha通道,添加透明度,设置透明度,COLOR_BGR2BGRA,cv.COLOR_BGR2BGRA