OpenCV入門教程(含人臉檢測與常用影象處理示例等)

在這篇文章中,我們將提供一些使用OpenCV的示例。

在OpenCV中混合影象

我們將提供一個逐步的示例,說明如何使用Python OpenCV混合影象。下面我們展示了目標影象和濾鏡影象。

目標影象

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

濾鏡影象

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

import cv2

# Two images

img1 = cv2。imread(‘target。jpg’)

img2 = cv2。imread(‘filter。png’)

# OpenCV expects to get BGR images, so we will convert from BGR to RGB

img1 = cv2。cvtColor(img1, cv2。COLOR_BGR2RGB)

img2 = cv2。cvtColor(img2, cv2。COLOR_BGR2RGB)

# Resize the Images。 In order to blend them, the two images

# must be of the same shape

img1 =cv2。resize(img1,(620,350))

img2 =cv2。resize(img2,(620,350))

# Now, we can blend them, we need to define the weight (alpha) of the target image

# as well as the weight of the filter image

# in our case we choose 80% target and 20% filter

blended = cv2。addWeighted(src1=img1,alpha=0。8,src2=img2,beta=0。2,gamma=)

# finally we can save the image。 Now we need to convert it from RGB to BGR

cv2。imwrite(‘Blending。png’,cv2。cvtColor(blended, cv2。COLOR_RGB2BGR))

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

在OpenCV中處理影象

我們將展示如何使用Python中的OpenCV應用影象處理。

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

如何模糊影像

import cv2

import numpy as np

import matplotlib。pyplot as plt

%matplotlib inline

img = cv2。imread(‘panda。jpeg’)

img = cv2。cvtColor(img, cv2。COLOR_BGR2RGB)

blurred_img = cv2。blur(img,ksize=(20,20))

cv2。imwrite(“blurredpanda。jpg”, blurred_img)

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

如何申請Sobel Operator

你可以在Wikipedia上檢視Sobel Operator:https://en。wikipedia。org/wiki/Sobel_operator

也可以開始嘗試一些過濾器。讓我們應用水平和垂直Sobel。

img = cv2。imread(‘panda。jpeg’,)

sobelx = cv2。Sobel(img,cv2。CV_64F,1,,ksize=5)

sobely = cv2。Sobel(img,cv2。CV_64F,,1,ksize=5)

cv2。imwrite(“sobelx_panda。jpg”, sobelx)

cv2。imwrite(“sobely_panda。jpg”, sobely)

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

如何對影象應用閾值

我們還可以對影象進行二值化。

img = cv2。imread(‘panda。jpeg’,)

ret,th1 = cv2。threshold(img,100,255,cv2。THRESH_BINARY)

fig = plt。figure(figsize=(12,10))

plt。imshow(th1,cmap=‘gray’)

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

OpenCV中的人臉檢測

我們將討論如何使用OpenCV應用人臉檢測。我們透過一個實際的可重現的示例來直截了當。

邏輯如下:我們從URL(或從硬碟)獲取影象。我們將其轉換為,然後轉換為灰度。然後透過應用適當的**CascadeClassifier,**我們獲得了人臉的邊界框。最後,使用PIllow(甚至是OpenCV),我們可以在初始影象上繪製框。

import cv2 as cv

import numpy as np

import PIL

from PIL import Image

import requests

from io import BytesIO

from PIL import ImageDraw

# I have commented out the cat and eye cascade。 Notice that the xml files are in the opencv folder that you have downloaded and installed

# so it is good a idea to write the whole path

face_cascade = cv。CascadeClassifier(‘C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default。xml’)

#cat_cascade = cv。CascadeClassifier(‘C:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalcatface。xml’)

#eye_cascade = cv。CascadeClassifier(‘C:\\opencv\\build\\etc\\haarcascades\\haarcascade_eye。xml’)

URL = “https://images。unsplash。com/photo-1525267219888-bb077b8792cc?ixlib=rb-1。2。1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80”

response = requests。get(URL)

img = Image。open(BytesIO(response。content))

img_initial = img。copy()

# convert it to np array

img = np。asarray(img)

gray = cv。cvtColor(img, cv。COLOR_BGR2GRAY)

faces = face_cascade。detectMultiScale(gray)

# And lets just print those faces out to the screen

#print(faces)

drawing=ImageDraw。Draw(img_initial)

# For each item in faces, lets surround it with a red box

for x,y,w,h in faces:

# That might be new syntax for you! Recall that faces is a list of rectangles in (x,y,w,h)

# format, that is, a list of lists。 Instead of having to do an iteration and then manually

# pull out each item, we can use tuple unpacking to pull out individual items in the sublist

# directly to variables。 A really nice python feature

#

# Now we just need to draw our box

drawing。rectangle((x,y,x+w,y+h), outline=“red”)

display(img_initial)

最初的影象是這樣的:

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

然後在繪製邊界框後,我們得到:

OpenCV入門教程(含人臉檢測與常用影象處理示例等)

如我們所見,我們設法正確地獲得了四個面,但是我們還發現了窗後的“鬼”……

裁剪臉部以分離影象

我們還可以裁剪臉部以分離影象

for x,y,w,h in faces:

img_initial。crop((x,y,x+w,y+h))

display(img_initial。crop((x,y,x+w,y+h)))

例如,我們得到的第一張臉是:

注意:如果你想從硬碟讀取影象,則只需鍵入以下三行:

# read image from the PC

initial_img=Image。open(‘my_image。jpg’)

img = cv。imread(‘my_image。jpg’)

gray = cv。cvtColor(img, cv。COLOR_BGR2GRAY)

OpenCV中的人臉檢測影片

這篇文章是一個實際示例,說明了我們如何將OpenCV]與Python結合使用來檢測影片中的人臉。在上一篇文章中,我們解釋瞭如何在Tensorflow中應用物件檢測和OpenCV中的人臉檢測。

通常,計算機視覺和物件檢測是人工智慧中的熱門話題。例如考慮自動駕駛汽車,該自動駕駛汽車必須連續檢測周圍的許多不同物體(行人,其他車輛,標誌等)。

如何錄製人臉檢測影片

在以下示例中,我們將USB攝像頭應用到人臉檢測,然後將影片寫入檔案。

如你所見,OpenCV能夠檢測到面部,並且當它隱藏在手後時,OpenCV會丟失它。

import cv2

# change your path to the one where the haarcascades/haarcascade_frontalface_default。xml is

face_cascade = cv2。CascadeClassifier(‘。。/DATA/haarcascades/haarcascade_frontalface_default。xml’)

cap = cv2。VideoCapture()

width = int(cap。get(cv2。CAP_PROP_FRAME_WIDTH))

height = int(cap。get(cv2。CAP_PROP_FRAME_HEIGHT))

# MACOS AND LINUX: *‘XVID’ (MacOS users may want to try VIDX as well just in case)

# WINDOWS *‘VIDX’

writer = cv2。VideoWriter(‘myface。mp4’, cv2。VideoWriter_fourcc(*‘XVID’),25, (width, height))

while True:

ret, frame = cap。read()

frame = detect_face(frame)

writer。write(frame)

cv2。imshow(‘Video Face Detection’, frame)

# escape button to close it

c = cv2。waitKey(1)

if c == 27:

break

cap。release()

writer。release()

cv2。destroyAllWindows()

計算機視覺程式碼的輸出

只需幾行程式碼即可透過動態人臉檢測錄製該影片。如果你執行上面的程式碼塊,你將獲得類似的影片。

https:// vimeo。com/364588657

☆ END ☆

如果看到這裡,說明你喜歡這篇文章,請轉發、點贊。微信搜尋「uncle_pn」,歡迎新增小編微信「 mthler」,每日朋友圈更新一篇高質量博文。