Biden的帽子忘记带了,你能用Python给它快速PS一个么?

简介: Biden的帽子忘记带了,你能用Python给它快速PS一个么?

项目需求


  今天不写游戏辅助了,今天做一个有意思的东西,实现给图像进行P图,不过我们今天不使用PS进行P图,我们使用Python对图像进行P图。


  功能描述:


  1. 读取图像a(人物图)


  1. 读取图像b(P图)


  1. 将图b使用代码PS到图像a上面去


  1. 需满足看起来较为和谐舒适




需求分析


  读取图像这个我们可以使用OpenCv很好能够解决这个问题,难点在后续的"PS"上面, 我们以PS一顶帽子为例子,对某登进行PS一顶绿油油的帽子,实现思路:


  1. 使用OpenCV检测出头部位置;


  1. 在头部位置上面放置待P的图像;


  1. 对帽子图像进行选择设置;


  1. 将画面变的协调起来。


选择人物图像以及帽子图像:image.png

image.png


  大家注意一下,我们选择帽子图像的时候,需要选择或者制作一个背景为纯黑色的图像,帽子款式任意选,我选了个比较适合某登的帽子,我想它应该会喜欢的.



代码实践


搭建戴帽子函数:

import cv2
class WearHat():
    def __int__(self):
        self.FaceModelPath = "./haarcascade_frontalface_default.Xml"
        self.color = (0, 255, 0)  # 定义绘制颜色
    def Place(self, PeopleImg, HatImg):
        FaceModel = cv2.CascadeClassifier(self.FaceModelPath)
        PeopleImgGray = cv2.cvtColor(PeopleImg, cv2.COLOR_BGR2GRAY)  # 转换灰色
        FaceRects = FaceModel.detectMultiScale(PeopleImgGray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
        if len(FaceRects):  # 大于0则检测到人脸
            for FaceRect in FaceRects:
                Xmin, Ymin, Wigth, Hight = FaceRect
                HatShape = HatImg.shape
                HatImgSizeH = int(HatShape[0] / HatShape[1] * Wigth)
                if HatImgSizeH > (Ymin - 20):
                    HatImgSizeH = (Ymin - 20)
                HatImgSize = cv2.resize(HatImg, (Wigth, HatImgSizeH), interpolation=cv2.INTER_NEAREST)
                Top = (Ymin - HatImgSizeH - 20)
                if Top <= 0:
                    Top = 0
                HatImgRows, HatImgCols, _ = HatImgSize.shape
                PeopleImgROI = PeopleImg[Top:Top + HatImgRows, Xmin:Xmin + HatImgCols]
                HatImgSizeGray = cv2.cvtColor(HatImgSize, cv2.COLOR_RGB2GRAY)
                _, HatImgSizeBW = cv2.threshold(HatImgSizeGray, 10, 255, cv2.THRESH_BINARY)
                HatImgSizeBwInv = cv2.bitwise_not(HatImgSizeBW)
                PeopleImg_BG = cv2.bitwise_and(PeopleImgROI, PeopleImgROI, mask=HatImgSizeBwInv)
                HatImg_FG = cv2.bitwise_and(HatImgSize, HatImgSize, mask=HatImgSizeBW)
                dst = cv2.add(PeopleImg_BG, HatImg_FG)
                PeopleImg[Top:Top + HatImgRows, Xmin:Xmin + HatImgCols] = dst
        return PeopleImg
复制代码


  这里我准备了两套戴帽子的方案:


  1. 对两张图像进行处理,最后输出带着一顶绿油油的帽子;


  1. 对一段某登的演讲视频做处理,视频中某登一直带着这顶绿油油的帽子


  本文中由于某登的视频不好找(主要是不好给某登的脸进行马赛克处理),暂时只发图像版的代码:

if __name__ == "__main__":
    PeopleImg = cv2.imread("Biden.jpg")
    HatImg = cv2.imread("GrennHat.jpg")
    GrennPeople = WearHat.Place(PeopleImg, HatImg)
    cv2.imshow("image", GrennPeople)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
复制代码


image.png


相关文章
|
1月前
|
存储 数据库 计算机视觉
Python图像处理库:学会Pillow再也不用PS啦
Python图像处理库:学会Pillow再也不用PS啦
|
Shell Python
[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程
[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程
99 0
[oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程
|
API Python
Python 3,4行代码实现去除图片背景色,从此告别PS!!
Python 3,4行代码实现去除图片背景色,从此告别PS!!
641 0
Python 3,4行代码实现去除图片背景色,从此告别PS!!
|
计算机视觉 Python
不用 PS 抠图,Python + OpenCV 实现自动海报场景替换!
现存在一个问题,就下面图片中的两本书而言,怎样快速让中间边的书本与左边书本对齐(最终效果能实现两张图片重叠(最终结果为右图)),进行的图像转变可旋转、平移、缩放、形变。
不用 PS 抠图,Python + OpenCV 实现自动海报场景替换!
|
Python
Python骚操作!你还在用PS制作电子签名吗?
在我们工作和生活中,你使用过电子签名吗? 众所周知,电子签名可以使用Photoshop制作,但是Photoshop安装过程复杂,占内存,杀鸡焉用牛刀?而且网上提供的在线转换也要注意安全性! 人生苦短,我用Python,毕竟它除了生孩子无所不会!搞定电子签名手到擒来的事情!往下看👇
416 0
Python骚操作!你还在用PS制作电子签名吗?
|
1月前
|
Linux
百度搜索:蓝易云【Linux系统ps命令:查看正在运行的进程】
通过这些简洁的ps命令用法,你可以方便地查看Linux系统中正在运行的进程信息。
48 1
|
1月前
|
存储 监控 Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 查看当前正在运行的进程信息 ps命令 使用指南
56 0
|
1月前
|
安全 Linux 应用服务中间件
linux(三十一)系统信息命令ps查看系统进程
linux(三十一)系统信息命令ps查看系统进程
170 1