资讯专栏INFORMATION COLUMN

简单的加圣诞帽的程序,python3+opencv3.4

xiaotianyi / 1903人阅读

摘要:另外添加了帽子的自适应大小,帽子会根据所检测到的人脸的区域的大小自行拉伸到合适大小,同时还对图片进行了规范化。

简单的加圣诞帽的程序,python3+opencv3.4

1月6号更新,在自己写完这个博客之后,女朋友发给我一个微信公众号,里面也同样推送了如何使用python写添加圣诞帽的程序,而且用了一个小技巧可以进行随机添加,同时还给我了我一张30多个人的图像让我全部添加,稍微了解一下opencv人脸检测,是默认检测所有人脸的,因此对代码有了很小的改动就完成了需求,以下

# OpenCV 人脸检测
face_patterns = cv2.CascadeClassifier("D:opencv3.0opencvsourcesdatahaarcascadeshaarcascade_frontalface_default.xml")
sample_image = cv2.imread("C:UsersElamDesktop	ttt.jpg")
faces = face_patterns.detectMultiScale(sample_image,
                                       scaleFactor=1.1,
                                       minNeighbors=10,
                                       minSize=(10, 10))
# 圣诞帽
hats = []
for i in range(6):
    hats.append(cv2.imread("C:UsersElamDesktop\%d.png" % i, -1))

for face in faces:
    # 随机一顶帽子
    hat = random.choice(hats)
    #下面就是之前的添加算法
    。。。。。。。。
    
    
    #########

最最最最简单的加圣诞帽的程序,python3+opencv3.4

# -*- coding: utf-8 -*-
"""
Created on Mon Dec 25 15:22:14 2017

@author: Elam
"""

import cv2
import numpy as np
face_patterns = cv2.CascadeClassifier("D:opencv3.0opencvsourcesdatahaarcascadeshaarcascade_frontalface_default.xml")
sample_image = cv2.imread("C:UsersElamDesktopllll.jpg")
hat=cv2.imread("C:UsersElamDesktoplvse.png",cv2.IMREAD_UNCHANGED)
a,b,c,d=cv2.split(hat)
rgb_hat=cv2.merge((a,b,c))
sample_wh=sample_image.shape
temp=float(sample_wh[1]/sample_wh[0])
temp_h=int(1024*temp)
sample_image_res=cv2.resize(sample_image,(temp_h,1024),interpolation=cv2.INTER_CUBIC)
faces = face_patterns.detectMultiScale(sample_image_res,scaleFactor=1.1,minNeighbors=5,minSize=(60, 60))
k_w=faces[0][2]
k_h=faces[0][3]

#####hat
hat_wh=rgb_hat.shape
temp_hat=float(hat_wh[1]/hat_wh[0])
#####改变帽子大小######
temp_hat_h=int((k_w)*4/5*temp_hat)
temp_hat_w=int(k_w*3/5)
###################



res=cv2.resize(rgb_hat,(temp_hat_h,temp_hat_w),interpolation=cv2.INTER_CUBIC)
res_d=cv2.resize(d,(temp_hat_h,temp_hat_w),interpolation=cv2.INTER_CUBIC)
#hsv=cv2.cvtColor(res,cv2.COLOR_BGR2HSV)
#lower_blue=np.array([0,0,0])
#upper_blue=np.array([255,255,253])
#mask = cv2.inRange(hsv, lower_blue, upper_blue)
#erode=cv2.erode(mask,None,iterations=2)
#dilate=cv2.dilate(erode,None,iterations=2)


####改变帽子位置#####
x_new=faces[0][0]+int(k_w/6)
y_new=faces[0][1]-int(k_h*0.65)
center=[y_new,x_new]#在新背景图片中的位置
for i in range(temp_hat_w):
    for j in range(temp_hat_h):
        if res_d[i,j]!=0:#0代表黑色的点
            sample_image_res[center[0]+i,center[1]+j]=res[i,j]#此处替换颜色,为BGR通道
######################

#cv2.imshow("Mask", mask)
#res=cv2.resize(hat,(182,220),interpolation=cv2.INTER_CUBIC)
#WH=res.shape
#mask=cv2.imread("C:UsersElamDesktophat.jpg",0)

#imgROI=sample_image[10:192,10:230]
#sample_image[0:220,0:182]=res
for (x, y, w, h) in faces:
    cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imwrite("C:UsersElamDesktop	est333333.png", sample_image_res)
#cv2.imwrite("C:UsersElamDesktophattttttt.png", hat)

写完才感觉真的很蠢,直接使用了opencv自带的人脸检测库,起初是利用人脸的黄金分割比例企图对帽子进行定位,后来发现他的人脸检测的框有时候会只检测到眉毛并不会框到额头。另外添加了帽子的自适应大小,帽子会根据所检测到的人脸的区域的大小自行拉伸到合适大小,同时还对图片进行了规范化。现在只能说对大部分比较标准的人脸可以做到帽子位置添加正确。实际上还试过有背景的帽子图片,做了很多掩膜提取的工作,但是效果都不是很好,最后还是去找了png格式的帽子图片。以下是随手测试的几张人脸效果

如有侵权请留言,我会删除。





文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41100.html

相关文章

  • 树莓派Opencv-python快速安装

    摘要:下载文件并传到树莓派上在电脑上打开下载与自己版本相对的文件,本文下载的是将其使用传输到树莓派,打开文件所在的树莓派目录,安装文件,显示成功安装。 在树莓派上直接下载opencv-python往往不能成功,近期查阅了csdn中的很多相关文章,发现大多文章讲解的过程比较复杂又麻烦且不一定能成功...

    J4ck_Chan 评论0 收藏0
  • gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例

    摘要:静态库在程序编译时会被连接到目标代码中,程序运行是则不需要静态库的存在。三总结本次作业使我了解了生成静态库和动态库的方法,在做的过程中也遇到了困难,通过网上各位大佬的帮助解决了。 ...

    missonce 评论0 收藏0
  • Python入门-Python简介

    摘要:年月宣布支持时间延长到年。更详细的发布列表参阅官网的版本号分为三段,形如。其中表示大版本号,一般当整体重写,或出现不向后兼容的改变时,增加表示功能更新,出现新功能时增加表示小的改动如修复了某个,只要有修改就增加。年公司正式发布。 < 返回索引页 Python语言简介 Python介绍及发展 介绍 Python 官方网站:https://www.python.org/, 大家可以到此处下...

    Java_oldboy 评论0 收藏0
  • 动态规划解题思路

    摘要:数键盘虽然是一个很简单的游戏,但是解答的过程中已经包含了最基础的动态规划解题思路定义状态再重新定义问题找到最基础的状态找出状态转移方程编程求解最长上升子序列问给定一个无序的整数数组,找到其中最长上升子序列的长度。 算法能力就是程序员的内力,内力强者对编程利剑的把控能力就更强。 数键盘 动态规划就是,通过递推的方式,由最基本的答案推导出更复杂答案的方法,直到找到最终问题的解。或者是,通过...

    miracledan 评论0 收藏0
  • 一、python与pycharm的安装

    摘要:是面向对象语言这意味着支持面向对象的风格或代码封装在对象的编程技术。在上执行命令,就可以进入到的交互模式,并显示出版本等信息。选择的版本,需要下载安装包,然后进行安装。 一、Python简介 Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程...

    awokezhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<