在這篇文章中,我們將提供一些使用OpenCV的示例。
在OpenCV中混合影象
我們將提供一個逐步的示例,說明如何使用Python 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中處理影象
我們將展示如何使用Python中的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)
如何申請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)
如何對影象應用閾值
我們還可以對影象進行二值化。
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應用人臉檢測。我們透過一個實際的可重現的示例來直截了當。
邏輯如下:我們從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)
最初的影象是這樣的:
然後在繪製邊界框後,我們得到:
如我們所見,我們設法正確地獲得了四個面,但是我們還發現了窗後的“鬼”……
裁剪臉部以分離影象
我們還可以裁剪臉部以分離影象
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」,每日朋友圈更新一篇高質量博文。