需求
输入一张人像图片,对人像图片进行分割
输入图片(912x618x3):
代码如下
相关API参考:paddlehub官网
import os
import glob
import cv2
import paddlehub as hub
pic_dir = './pic/'
images_name = sorted(glob.glob(pic_dir+'*.png'))[:1]
module_root = './deeplabv3p_xception65_humanseg/'
module = hub.Module(name=None, directory=module_root)
# results是一个列表, 元素是字典
results = module.segmentation(data={'image': images_name },
batch_size=4,
visualization=True,
output_dir='./2pic_/')
print('module.segmentation方法有哪些参数:', module.segmentation.__code__.co_varnames)
print('预测结果results类型:', type(results)) # list
print('列表的每个元素results[0]类型:', type(results[0])) # dict
print('results[0]有哪些字段:', list(results[0].keys())) # 'save_path'和'data'字段
print("results[0]['save_path']:", results[0]['save_path']) # save_path'对应的值为module.segmentation的参数output_dir值
print(type(results[0]['data'])) # ndarray
print(results[0]['data'].shape) # (618, 912, 4) 是一个png图片
cv2.imwrite('./1.png', results[0]['data'])
# output_dir和cv2.imwrite都是一样的图片
运行结果如下
分割后的图片:
分割出来的图片解析
解析代码
img1 = Image.open('./00000001.png')
print("img1 模式:", img1.mode)
print("img1 尺寸:", img1.size)
print("img1 通道数:", len(img1.split()))
r,g,b,a = img1.split()
image_rgb = Image.merge("RGB", (r,g,b))
image_rgb.save('image_rgb-1.png')
a.save('image_a-1.png')
print('img1 通道a有哪些值:', set(np.array(a).flatten().tolist()))
运行结果
终端截图
image_rgb-1.png
image_a-1.png
可以参考资料
https://blog.csdn.net/hawkman/article/details/103901398
https://aistudio.baidu.com/aistudio/projectdetail/445281?channelType=0&channel=0
https://blog.csdn.net/hhhhhh13579/article/details/105924669
https://aistudio.baidu.com/aistudio/projectdetail/444078