使用python半分鐘輕松完成證件照換底色
導(dǎo)語
小伙伴們都知道,剛?cè)肼毜臅r候都是要求新人入職帶著自己的證件照的,這應(yīng)該是幾寸的來著,小編入職這么久都忘記了!??!
昨天下班之后跟之前的老朋友聚餐,其實一個兄弟的跟我說:“老表,你現(xiàn)在是編程的,又沒得辦法幫我一個忙?” 我這一聽:“什么事兒?你說”
“我老婆前幾天剛?cè)肼毿鹿?,但是入職之后才曉得照片是需要藍底兒的,主要是那個照證件照的離家太遠了,索性問下你有啥辦法沒?“
那當(dāng)然,為了節(jié)省他們的時間,這小忙我義不容辭,也就幾分鐘的事兒。?
正文
環(huán)境安裝部分(1):
Python3.6;
numpy函數(shù)庫;
opencv庫。
pip install numpy
pip install opencv-python
證件照的讀取與縮放比列(2):
# step1: 讀取照片img = cv2.imread(file) # step2: 縮放圖片()img = cv2.resize(img, None, fx=1.5, fy=1.5)rows, cols, channels = img.shape
三色圖片有RGB三個顏色通道,無法進行腐蝕和膨脹的操作。
這個就需要我們將彩色圖片轉(zhuǎn)換為hsv灰度圖像后,再完成腐蝕和膨脹的操作(3):
# 展示圖片
cv2.imshow("original...", img)# step2.1
圖片轉(zhuǎn)換為灰度圖并顯示hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)將圖片進行二值化處理(4):
紅底變藍底,將在兩個閾值內(nèi)的像素值設(shè)置為白色(255)
而不在閾值區(qū)間內(nèi)的像素值設(shè)置為黑色(0)
lower_red= np.array([0,125,125]) upper_red = np.array([255,255,255]) mask = cv2.inRange(hsv, lower_red, upper_red)
圖象的腐蝕和膨脹、遍歷每個像素點進行顏色替換(5):
#step3:腐蝕膨脹 若是腐蝕膨脹后仍有白色噪點,可以增加iterations的值
erode = cv2.erode(mask, None, iterations=5)
# cv2.imshow('erode', erode)dilate = cv2.dilate(erode, None, iterations=7)
# step3.1遍歷每個像素點,進行顏色的替換'''
#若是想要將紅底變成藍底img[i,j]=(255,0,0),
#若是想將藍底變?yōu)榧t底則img[i,j]=(0,0,255),
#若是想變白底
img[i,j]=(255,255,255)'''for i in range(rows):
for j in range(cols):
if dilate[i,j] ==255:
# 像素點255表示白色,180為灰度 img[i,j]=(255,0,0)
# 此處替換顏色,為BGR通道,不是RGB通道圖片效果:
?
????
???
??
??
附源碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import cv2
import numpy as np
file=r".\\pic\\小姐姐.png"
# step1:讀取照片
img = cv2.imread(file)
# step1.2:縮放圖片()
img = cv2.resize(img, None, fx=1.5, fy=1.5)
rows, cols, channels = img.shape
# 展示圖片
cv2.imshow("original...", img)
# step2.1 圖片轉(zhuǎn)換為灰度圖并顯示
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# :圖片的二值化處理
# 紅底變藍底
# 將在兩個閾值內(nèi)的像素值設(shè)置為白色(255),
#而不在閾值區(qū)間內(nèi)的像素值設(shè)置為黑色(0)
#
lower_red= np.array([0,125,125])
upper_red = np.array([255,255,255])
mask = cv2.inRange(hsv, lower_red, upper_red)
#step2.3:腐蝕膨脹 若是腐蝕膨脹后仍有白色噪點,可以增加iterations的值
erode = cv2.erode(mask, None, iterations=5)
# cv2.imshow('erode', erode)
dilate = cv2.dilate(erode, None, iterations=7)
# step3遍歷每個像素點,進行顏色的替換
'''
#若是想要將紅底變成藍底img[i,j]=(255,0,0),
#若是想將藍底變?yōu)榧t底則img[i,j]=(0,0,255),
#若是想變白底img[i,j]=(255,255,255)
'''
for i in range(rows):
for j in range(cols):
if dilate[i,j] ==255: # 像素點255表示白色,180為灰度
img[i,j]=(255,0,0) # 此處替換顏色,為BGR通道,不是RGB通道
#step4 顯示圖像
new_file=r".\\pic\\小姐姐_blue.png"
cv2.imwrite(new_file, img)
res = cv2.imread(new_file)
cv2.imshow('result...', res)
# 窗口等待的命令,0表示無限等待
cv2.waitKey(0)安啦!換證件照的小程序就寫好了。換上自己的圖片試試叭??!
以上就是使用python半分鐘輕松完成證件照換底色的詳細內(nèi)容,更多關(guān)于python完成證件照換底色的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Pandas中DataFrame數(shù)據(jù)合并,連接(concat,merge,join)的實例
今天小編就為大家分享一篇在Pandas中DataFrame數(shù)據(jù)合并,連接(concat,merge,join)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作
這篇文章主要介紹了Pytorch模型遷移和遷移學(xué)習(xí),導(dǎo)入部分模型參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
python 2.6.6升級到python 2.7.x版本的方法
這篇文章主要介紹了python 2.6.6升級到python 2.7.x版本的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-10-10
Python實現(xiàn)PDF文字識別提取并寫入CSV文件
這篇文章主要是和大家分享一個Python實現(xiàn)PDF文字識別與提取并寫入?CSV文件的腳本。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2022-03-03
Python使用Gradio實現(xiàn)免費的內(nèi)網(wǎng)穿透
內(nèi)網(wǎng)穿透是一種將內(nèi)部網(wǎng)絡(luò)服務(wù)暴露到公共網(wǎng)絡(luò)的技術(shù),可以讓外部用戶訪問內(nèi)部網(wǎng)絡(luò)上的服務(wù),本文將介紹如何使用Gradio實現(xiàn)免費的內(nèi)網(wǎng)穿透,需要的可以參考下2024-03-03

