该代码段展示了如何利用OpenCV库将含有绿幕的图片转换成具有透明背景的PNG图片。通过色彩空间转换(HSV),定义绿色范围,创建掩码,然后进行按位运算来分离和提取绿幕部分,最终保存为带Alpha通道的图像。
- def get_none_img(img):
- """
- 将绿幕图片抠成透明背景图片
- :return:
- """
- # todo 读取并转换图片格式
- _, ext = os.path.splitext(img)
- opencv = cv2.imread(os.path.join(IMAGES_ABS_PATH, img))
- hsv = cv2.cvtColor(opencv, cv2.COLOR_RGB2HSV)
-
- # todo 指定绿色范围,60表示绿色,我取的范围是-+10
- minGreen = np.array([30, 70, 70])
- maxGreen = np.array([80, 255, 255])
-
- # todo 确定绿色范围
- mask = cv2.inRange(hsv, minGreen, maxGreen)
-
- # todo 确定非绿色范围
- mask_not = cv2.bitwise_not(mask)
-
- # todo 通过掩码控制的按位与运算锁定绿色区域
- green = cv2.bitwise_and(opencv, opencv, mask=mask)
-
- # todo 通过掩码控制的按位与运算锁定非绿色区域
- green_not = cv2.bitwise_and(opencv, opencv, mask=mask_not)
-
- # todo 拆分为3通道
- b, g, r = cv2.split(green_not)
-
- # todo 合成四通道
- bgra = cv2.merge([b, g, r, mask_not])
-
- # todo 保存带有透明通道的png图片,有了这种素材之后,就可以给这张图片替换任意背景了
- cv2.imwrite(f'./caches/image1/{_}.png', bgra)
-