OpenCV Python系列 第二十二集 戴面具

2021-08-27 23:53:09 字數 2011 閱讀 8122

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的不只出現在邊緣地方,還可能是...