使用Mask R-CNN制作Color Pop效果

115 阅读1分钟

概述

本篇博客主要介绍如何使用Mask R-CNN和 GrabCut来制作Color Pop效果,Color Pop效果就是让主体呈现彩色,环境呈现黑白色,效果如下

popeffectsnapshot.jpg

原理

主体提取

这部分可以参考自动抠图-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文件