Python使用OpenCV绿幕抠图生成带有透明通道的PNG图片

您所在的位置:网站首页 原神人物抠图绿幕图片 Python使用OpenCV绿幕抠图生成带有透明通道的PNG图片

Python使用OpenCV绿幕抠图生成带有透明通道的PNG图片

2024-07-09 08:02| 来源: 网络整理| 查看: 265

原图片 在这里插入图片描述 带有透明通道的图片(在浏览器状态下透明背景呈现白色) 在这里插入图片描述Python完整代码如下,具体实现流程代码注释已经解释很清楚了,详情请看注释

import cv2 import numpy as np # todo 读取并转换图片格式 opencv = cv2.imread('/home/huangjx/Pictures/boy.jpeg') hsv = cv2.cvtColor(opencv, cv2.COLOR_RGB2HSV) # todo 指定绿色范围,60表示绿色,我取的范围是-+10 minGreen = np.array([50, 100, 100]) maxGreen = np.array([70, 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('/home/huangjx/Pictures/boy.png', bgra) # todo 显示图片验证结果,opencv LOGO 图片 cv2.imshow('opencv', opencv) cv2.imshow('green', green) cv2.imshow('green_not', green_not) cv2.waitKey() cv2.destroyAllWindows()

再放一张效果图片吧 原图:在这里插入图片描述 结果: 在这里插入图片描述从这组图片对比可以看出来,这种方法对边缘的扣取效果还是不够完美。

但是如果你对HSV格式比较熟悉的话,你更改下面的值,理论上可以扣取任意颜色背景的图片(例如背景是紫色你也能搞定),这就是PS做不到的优势了

# todo 指定绿色范围,60表示绿色,我取的范围是-+10 minGreen = np.array([50, 100, 100]) maxGreen = np.array([70, 255, 255])


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3