python写圣诞树,python圣诞节代码

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: