概述
本篇博客主要介绍如何使用Mask R-CNN和 GrabCut来制作Color Pop效果,Color Pop效果就是让主体呈现彩色,环境呈现黑白色,效果如下
原理
主体提取
这部分可以参考自动抠图-Mask R-CNN & grabcut
颜色控制
提取到主体的mask后,将原图转换成三通道灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
gray_img_channel3 = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2RGB)
这里用了比较笨的办法,转成单通道灰度图再转成3通道RGB图,然后使用主体的Mask将主体图片和灰度原图混合
for i in range(0, obj_count):
roi_mask = masks[0:, 0:, i:i + 1]
roi_rect = rois[i]
obj_img, mask, roi = cut_image(img, roi_mask, roi_rect)
gray_img_channel3[roi[0]: roi[2], roi[1]: roi[3], :] = gray_img_channel3[roi[0]: roi[2], roi[1]: roi[3], :] * (
1 - mask & 1) + (mask & 1) * obj_img
这里遍历了所有主体,并将主体区域的原图清0,叠加主体彩色图
代码
可以下载完整例子查看ColorPopEffect.py
文件