tip:實時監測人臉,並戴上面具。
# -*- coding: utf-8 -*-
"""created on tue sep 4 08:50:53 2018
@author: administrator
"""import cv2
def maskman(face_mask):
#獲取面具的寬高
h_mask,w_mask = face_mask.shape[:2]
#開啟預設攝像頭
cap = cv2.videocapture(0)
#判斷是否已開啟
if not cap.isopened:
raise ioerror("cannot open the default webcam!")
#載入配置檔案
face_cascade = cv2.cascadeclassifier("./data/haarcascades/haarcascade_frontalface_alt.xml")
if face_cascade.empty():
raise ioerror("cannot load the xml file.")
#縮小尺寸
scale_factor = 0.75
while true:
ret,frame = cap.read()
frame = cv2.resize(frame,none,
fx = scale_factor,
fy = scale_factor,
interpolation = cv2.inter_area)
gray_frame = cv2.cvtcolor(frame,cv2.color_bgr2gray)
#面部位置
face_rects = face_cascade.detectmultiscale(gray_frame)
for (x,y,w,h) in face_rects:
if h>0 and w>0:
h,w = int(1.4*h),int(1.0*w)
y = int(y-0.1*h)
#提取影象感興趣的部分
frame_roi = frame[y:y+h,x:x+w]
#調整面具大小
face_mask_small = cv2.resize(face_mask,(w,h),
interpolation = cv2.inter_area)
#面具掩膜
gray_mask = cv2.cvtcolor(face_mask_small,cv2.
color_bgr2gray)
ret,mask = cv2.threshold(gray_mask,180,250,
cv2.thresh_binary_inv)
#反轉mask_inv = cv2.bitwise_not(mask)
#使用mask提取感興趣區域
masked_face = cv2.bitwise_and(face_mask_small,
face_mask_small,
mask = mask)
#使用反轉mask保持感興趣區域的資訊
masked_frame = cv2.bitwise_and(frame_roi,
frame_roi,
mask = mask_inv)
#將兩張masked影象加入最終圖
OpenCV Python系列之相機校準
在本次教程中,我們將介紹 由相機引起的失真型別,如何找到相機的固有和非固有特性 如何根據這些特性使影象不失真 一些針孔相機會給影象帶來明顯的失真。兩種主要的變形是徑向變形和切向變形。徑向變形會導致直線出現彎曲。距影象中心越遠,徑向畸變越大。例如,下面顯示乙個影象,其中棋盤的兩個邊緣用紅線標記。但是,...
OpenCV Python系列之哈里斯角檢測
我們在上次簡述了opencv的特徵基礎原理,本次我們將步入實戰部分,開始進行特徵的初階檢測。原理 在上乙個教程中,我們知道了角點是影象中向任意方向發生改變時,都引起影象強烈變動的區域。chris harris 和 mike stephens 在他們1988年的 a combined corner a...
OpenCV Python系列之拉普拉斯運算元
我們在上乙個教程中前面的例子學習了使用sobel邊緣檢測。原理是利用邊緣區域畫素值的跳變。通過求一階導數,可以使邊緣值最大化。如下圖所示 那麼,如果求二階導數會得到什麼呢?可以觀察到二階導數為0的地方。因此,可以利用該方法獲取影象中的邊緣。然而,需要注意的是二級導數為0的不只出現在邊緣地方,還可能是...