python 实现证件照更换背景色,撩妹功能,速速来get

422 阅读2分钟

     产品妹子在工作群里问谁能免费帮她换个证件照的背景色,这个时候就显出划水的我来了,上来自告奋勇,妹子把证件照发来,我赶紧打开Python,三下五除二就撸了一个换背景色的代码,妹子崇拜的跟我说谢谢哥哥。我心里咯咯咯,表面淡定的说,小事小事。好了故事就编到这了,故事的中心思想是,空有一身武艺,铁子你得支棱起来啊,上代码!!!!

    把Python3 搞里头!!!

    把cv2搞里头!!!

    把numpy搞里头!!!

import cv2
import numpy as np
import sys

def change(sourcefile,savepath,colortype):
    # 读取照片
    image=cv2.imread(sourcefile)

    # 图像缩放
    img = cv2.resize(image,None,fx=0.5,fy=0.5)
    rows,cols,channels = img.shape

    # 图片转换为灰度图
    hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

    # 图片的二值化处理
    #红底变蓝底
    if colortype == '1':
      lower_blue = np.array([0,135,135])
      upper_blue = np.array([180,245,230])
      mask = cv2.inRange(hsv, lower_blue, upper_blue)
  

    # #蓝底变红底
    if colortype == '2':
      lower_red = np.array([90,70,70])
      upper_red = np.array([110,255,255])
      mask = cv2.inRange(hsv, lower_red, upper_red)

    #腐蚀膨胀
    erode=cv2.erode(mask,None,iterations=1)
    dilate=cv2.dilate(erode,None,iterations=1)

    # 遍历每个像素点,进行颜色的替换
    for i in range(rows):
      for j in range(cols):
        if dilate[i,j]==255:    # 像素点为255表示的是白色,我们就要将白色处的像素点,替换为你想要的照片底色
          if colortype == '1':
            img[i,j]=(255,0,0)    # 此处替换颜色,为BGR通道,不是RGB通道,若是想要将红底变成蓝底img[i,j]=(255,0,0),若是想讲蓝底变为红底则img[i,j]=(0,0,255)
          elif colortype == '2':
            img[i, j] = (255, 255, 255)  # 变白底
    cv2.imwrite(savepath, img)

if __name__ == '__main__':
  sourcefile = sys.argv[1]
  savepath = sys.argv[2]
  colortype = sys.argv[3]
  change(sourcefile,savepath,colortype)

     简单实用,最后就看你们能不能把妹子搞里头了!!!看不懂代码的留言,如果把妹这件事还用我教你们的话,那你代码真是白写了,散会!!!

     推广一下个人工具站,点击这里我把一些Python实现的小工具做到网站上了,代码不会写的,直接用这个免费的