python使用cv2实现证件照换底色

一、使用的cv2库其实是要install opencv-python的

pip install  -i https://pypi.doubanio.com/simple/  --trusted-host pypi.doubanio.com    --target=g:pythonlibsite-packages  opencv-python

二、cv2基础使用 1、打开与展示图片

import cv2
#打开展示
img=cv2.imread(1.jpg,1)#0是黑白图,1是彩色
cv2.imshow(imgshow,img)#imgshow是打开窗口的名字
cv2.waitKey(0)#0代表无限等待,不然窗口会闪退
#放大缩小
rows,kols,channels=img.shape#获取尺寸
print(rows,kols,channels)#640 480 3
img=cv2.resize(img,None,fx=0.5,fy=0.5)#缩小图片尺寸
rows,kols,channels=img.shape
print(rows,kols,channels)#320 240 3
#z转换成二值化图(不是黑白)
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#z转换成二值化图(不是黑白)

2、使用np数组给图片变形

import numpy as np
kernel=np.ones((5,5),np.uint8)#uint8指定数据类型
print(kernel)

3、腐蚀与膨胀

import numpy as np
import cv2

img=cv2.imread(1.png,1)#0是黑白图,1是彩色
kernel=np.ones((5,5),np.uint8)#uint8指定数据类型

erosion=cv2.erode(img,kernel)#腐蚀
dilation=cv2.dilate(img,kernel)#膨胀

cv2.imshow(show,np.hstack((img,erosion,dilation)))#显示在一张图上
cv2.waitKey(0)#0代表无限等待,不然窗口会闪退

三、证件照(蓝底–>红底)

import numpy as np
import cv2

img=cv2.imread(me.jpg,1)#0是黑白图,1是彩色
rows,kols,channels=img.shape#获取尺寸

hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#z转换成二值化图 BGR
#cv2.imshow(hsv,hsv)

lower_blue=np.array([90,70,70])#原图为蓝底,数字自己调
upper_blue=np.array([110,255,255])
mask=cv2.inRange(hsv,lower_blue,upper_blue)#转成黑白图,勾出轮廓,但主体黑色内会出现白色小点
cv2.imshow(mask,mask)

erosion=cv2.erode(mask,None,iterations=1)#数组是None,腐蚀会使白色小点变少,但换底后轮廓明显
dilation=cv2.dilate(mask,None,iterations=1)#膨胀会使白色小点变多,但换底后轮廓比较自然

for i in range(rows):
    for j in range(kols):
        if erosion[i,j]==255:#
            img[i,j]=(0,0,255)#换成红底 rgb是(255,0,0) 本图是GBR(0,0,255)
cv2.imshow(result,img)

cv2.imwrite(result.jpg,img)#保存

cv2.waitKey(0)
cv2.destroyAllWindows()#关闭全部窗口
经验分享 程序员 微信小程序 职场和发展