python写圣诞树,python圣诞节代码
环境与测试图主要是基于dlib实现,自己安装
测试图:
代码将数组作为铭牌导入
导入cv2
导入dlib
# 给图片中的人头像加上圣诞帽,人脸最好为正脸
def add_hat(img,hat_img):
# 分离颜色通道,合成rgb三通道帽子图,一个通道后面做面具用
r,g,b,a=cv2.split(hat_img)
rgb_hat=cv2.merge((r,g,b))
cv2.imwrite(hat_alpha.jpg ,a)
# - 用dlib的人脸检测代替开放计算机视觉的人脸检测-
# # 灰度变换
# gray=cv2.cvtColor(img,cv2 .COLOR_BGR2GRAY)
# # 用中文版自带的人脸检测器检测人脸
# face_cascade=cv2 .级联分类器( Haar cascade _ frontal face _ default。XML’)
# faces=face _ cascade。检测多级灰度(灰度,1.05,3,cv2 .级联_缩放_图像,(50,50))
# - 用dlib的人脸检测代替开放计算机视觉的人脸检测-
# dlib人脸关键点检测器
predictor _ path= shape _ predictor _ 5 _ face _ landmarks。“日期”
预测值=dlib。形状预测器(预测器路径)
# dlib正脸检测器
检测器=dlib。get _ frontier _ face _ detector()
# 正脸检测
详细信息=检波器(img,1)
# 如果检测到人脸
如果len(dets)为0:
对于数据元素类型中的d:
x,y,w,h=d.left(),d.top(),d.right()-d.left(),d.bottom()-d.top()
# x,y,w,h=faceRect
# cv2.rectangle(img,(x,y),(x w,y h),(255,0,0),2,8,0)
# 关键点检测,5个关键点
形状=预测值(img,d)
# for point in shape.parts():
# cv2.circle(img,(point.x,point.y),3,color=(0,255,0))
# cv2.imshow(image ,img)
# cv2.waitKey()
# 选取左右眼眼角的点
point1=shape.part(0)
点2=形状。零件(2)
# 求两点中心
eyes _ center=((点1。x点2。x)//2,(point1.y point2.y)//2)
# cv2.circle(img,eyes_center,3,color=(0,255,0))
# cv2.imshow(image ,img)
# cv2.waitKey()
# 根据人脸大小调整帽子大小
因子=1.5
resized _ hat _ h=int(round(RGB _ hat。形状[0]*带RGB _ hat。形状[1]*因子))
resized _ hat _ w=int(round(RGB _ hat。形状[1]* w/RGB _ hat。形状[1]*因子))
如果调整大小_hat_h y:
调整大小_帽子_h=y-1
# 根据人脸大小调整帽子大小
resized_hat=cv2.resize(rgb_hat,(resized_hat_w,resized_hat_h))
# 用希腊字母的第一个字母通道作为面具
mask=cv2.resize(a,(resized_hat_w,resized_hat_h))
mask_inv=cv2.bitwise_not(mask)
# 帽子相对与人脸框上线的偏移量
dh=0
dw=0
# 原图投资收益率
# BG _ ROI=img[y DH-resized _ hat _ h:y DH,x dw:x dw resized_hat_w]
BG _ ROI=img[y DH-调整大小_hat_h:y dh,(eyes _ center[0]-调整大小_hat_w//3):(eyes_center[0]调整大小_hat_w//3*2)]
# 原图投资收益率中提取放帽子的区域
bg_roi=bg_roi.astype(float)
mask_inv=cv2.merge((mask_inv,mask_inv,mask_inv))
alpha=mask _ inv。astype(浮点)/255
# 相乘之前保证两者大小一致(可能会由于四舍五入原因不一致)
alpha=cv2.resize(alpha,(bg_roi.shape[1],bg_roi.shape[0])
# print(alpha大小: ,阿尔法形状)
# print(bg_roi size:,bg_roi.shape)
bg=cv2.multiply(alpha,bg_roi)
bg=bg.astype(uint8 )
cv2.imwrite(bg.jpg ,bg)
# cv2.imshow(image ,img)
# cv2.waitKey()
# 提取帽子区域
hat=cv2.bitwise_and(调整大小的帽子,调整大小的帽子,掩码=掩码)
cv2.imwrite(hat.jpg ,hat)
# cv2.imshow(帽子,帽子)
# cv2.imshow(bg ,bg)
#打印(背景大小: ,背景形状)
#打印(帽子大小: ,hat.shape)
# 相加之前保证两者大小一致(可能会由于四舍五入原因不一致)
hat=cv2.resize(hat,(bg_roi.shape[1],bg_roi.shape[0])
# 两个投资收益率区域相加
add_hat=cv2.add(bg,hat)
# cv2.imshow(add_hat ,add_hat)
# 把添加好帽子的区域放回原图
img[y DH-调整大小_hat_h:y dh,(eyes _ center[0]-调整大小_hat_w//3):(eyes_center[0]调整大小_hat_w//3*2)]=add_hat
# 展示效果
# cv2.imshow(img ,img)
# cv2.waitKey(0)
返回图片
# 读取帽子图,第二个参数-1表示读取为颜色通道,否则为rgb通道
hat_img=cv2.imread(hat2.png ,-1)
# 读取头像图
img=cv2.imread(1.png )
output=add_hat(img,hat_img)
# 展示效果
cv2.imshow(output ,输出)
cv2.waitKey(0)
cv2.imwrite(output.jpg ,输出)
#将一团作为千兆字节导入
# img_path=gb.glob(。/images/*。jpg’)
#对于img_path中的路径:
# img=cv2.imread(路径)
# #添加一顶帽子
# output=add_hat(img,hat_img)
# #显示效果
# cv2.imshow(output ,output)
# cv2.waitKey(0)
2.cv2.destroyAllWindows()运行效果和完整的项目文件
完整的项目文档:
微信官方账号:玩转大数据
回复:圣诞帽
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。