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()#关闭全部窗口
