安裝
pip install numpy
pip install opencv-python
pip install opencv-contrib-python
OpenCV主要模塊
core
核心功能模塊。該模塊主要包含 OpenCV庫的基礎(chǔ)結(jié)構(gòu)以及基本操作,例如OpenCV基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)、繪圖函數(shù)、數(shù)組操作相關(guān)函數(shù)、動態(tài)數(shù)據(jù)結(jié)構(gòu)等calib3d:
這個模塊名稱是有 calibration(校準(zhǔn))和 3D 兩個術(shù)語的縮寫組合而成。包含了相機(jī)標(biāo)定與立體視覺等功能,例如物體位姿估計、三維重建、攝像頭標(biāo)定等dnn
深度學(xué)習(xí)模塊。該模塊是 OpenCV4版的一個特色,主要包括:構(gòu)建神經(jīng)網(wǎng)絡(luò)、加載序列化網(wǎng)絡(luò)模型等。但這一模塊目前僅適用與正向傳遞計算(測試網(wǎng)絡(luò)),原則上不支持反向計算(訓(xùn)練網(wǎng)絡(luò))。
feature2d
該模塊是由 feature(特征)和 2D 兩個術(shù)語的縮寫組合而成的,其功能主要為處理圖像特征點,例如特征檢測、描述、匹配等
flann
快速近似最鄰近庫(Fast Library for Approximate Nearest Neighbors)。該模塊是高維的近似近鄰快速搜索算法庫,主要包含快速近似近鄰搜索、聚類等
gapi
該模塊是 OpenCV4.0 中新增模塊,旨在加速常規(guī)的圖像處理。與其他模塊相比,這個模塊主要充當(dāng)框架,而不是某些特定的計算機(jī)視覺算法
highgui
高層 GUI,包含創(chuàng)建和操作顯示圖像的窗口、處理鼠標(biāo)事件及鍵盤命令、提高圖形交互可視化界面等
imgcodecs
圖像文件讀取與保存模塊,主要用于圖像文件讀取與保存
imgproc
該模塊名稱是由 image(圖像)和 process(處理)兩個組合而成。是重要的圖像處理模塊,主要包含:圖像濾波、幾何變換、直方圖、特征檢測、目標(biāo)檢測等
ml
機(jī)器學(xué)習(xí)模塊,主要包括:統(tǒng)計分類、回歸、數(shù)據(jù)聚類等
objdetect
目標(biāo)檢測模塊,主要用于圖像的目標(biāo)檢測,如檢測 Haar 特征
photo
計算攝像模塊,只要包含圖像修復(fù)、去燥等
stitching
圖像拼接模塊,主要包含:特征點尋找與匹配圖像、估計旋轉(zhuǎn)、自動校準(zhǔn)、接縫估計等圖像拼接過程的相關(guān)內(nèi)容
video
視頻分析模塊,主要包含:運動估計、背景分離、對象跟蹤等視頻處理等
videoio
視頻輸入/輸出模塊,主要用于讀取、寫入視頻 或者圖像序列
圖片基本操作
攝像頭采集圖片
# 引入OpenCV庫
import cv2
# 調(diào)用攝像頭進(jìn)行拍照 VideoCapture(0)0為默認(rèn)攝像頭
cap = cv2.VideoCapture(0)
# 獲取一幀圖片
# 如果捕獲成功,代碼中ret值為真,img為捕獲的圖像。
ret, img = cap.read()
# 釋放捕獲對象
cap.release()
讀取圖片
cv2.imread(path, 標(biāo)記)
第二個參數(shù)指定圖片被讀取的方式:
cv2.IMREAD_COLOR
: 讀入彩色圖像,默認(rèn)模式;cv2.IMREAD_GRAYSCALE
: 以灰度模式讀入圖像;cv2.IMREAD_UNCHANGED
: 加載圖像包含alpha
通道。使用數(shù)字簡約表示以上三種標(biāo)記,分別為
1
,0
或-1
。
import cv2
image_path = "images.jpg"
img = cv2.imread(image_path,0)
顯示圖像
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
## 如果捕獲成功,代碼中ret值為真,img為捕獲的圖像。
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("錯誤")
imshow(窗口名稱, 圖片對象)
保存圖片
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.imwrite('2.png', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("錯誤")
import cv2
cap=cv2.VideoCapture(0)
ret,img=cap.read()
cap.release()
if ret:
cv2.imshow('demo',img)
cv2.imwrite('2.png', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("錯誤")
cv2.imwrite(path, 圖片對象)
色彩空間
色彩空間(Color space)
是對色彩的組織方式,是坐標(biāo)系統(tǒng)和子空間的闡述,位于系統(tǒng)的每種顏色都有單個點表示。
RGB
OpenCV
中默認(rèn)的色彩空間是BGR
。BGR
與RGB
的區(qū)別只是三個顏色信道的位置發(fā)生了變化,實際上原理相同。
HSV與HSL色彩空間
為了更好的數(shù)字化處理顏色,提出了
HSV
,HSL
兩個色彩空間。
HSV
色彩空間中,H
是色調(diào)(hue)
,S
是飽和度(saturation)
,V
是明度(value)
。
HSL
色彩空間中,H
是色調(diào)(hue)
,S
是飽和度(saturation)
,L
是亮度(lightness)
。
灰度空間
在
OpenCV
的灰度空間中,和一般的色彩空間相同,每一個顏色都有三個量,但是只有第一個亮度有值,所以表示為(亮度,0,0)
。其中,亮度是根據(jù)如下灰度公式計算而得:
Gray = R*0.299 + G*0.587 + B*0.114
色彩空間轉(zhuǎn)換
經(jīng)常用到的是以下兩種:
-
BGR
空間到Gray
空間 的轉(zhuǎn)換; -
BGR
空間到HSV
空間 的轉(zhuǎn)換。
使用的函數(shù)為:cv2.cvtColor()
。
它的函數(shù)聲明為:
cv2.cvtColor(圖片對象,轉(zhuǎn)換類型)
對于
BGR
到Gray
的轉(zhuǎn)換,使cv2.COLOR_BGR2GRAY
類型。同樣的,對于
BGR
到HSV
的轉(zhuǎn)換,使用cv2.COLOR_BGR2HSV
類型。
import cv2, requests
r=requests.get('https://raw.githubusercontent.com/MrHarsh10/ImageHosting-/main/img/202209062216524.jpg')
with open('pic.jpg','wb') as f:
f.write(r.content)
img=cv2.imread('pic.jpg',1)
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('處理前',img)
cv2.imshow('處理后',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('test.jpg',img2)
人臉識別應(yīng)用
類Harr特征
圖像中的特征通常是指,圖片的像素點經(jīng)過一系列的運算之后得到的結(jié)果,這些結(jié)果可能是向量、矩陣和多維數(shù)據(jù)等等。類
Harr
特征是一種反映圖像的灰度變化的,像素分模塊求差值的一種特征。Harr特征類別
可分為三類:邊緣特征、線性特征、中心特征和對角線特征
邊緣特征
線性特征
中心特征和對角線特征
使用Harr分類器檢測人臉
OpenCV
中的人臉訓(xùn)練模型格式為 XML
,可以從 https://github.com/opencv/opencv/tree/master/data/haarcascades 。在此我們使用Harrcascade_frontalface_default.xml
模型檢測人臉。
聲明分類器:
CascadeClassifier(path)
調(diào)用分類函數(shù):
detectMultiScale(img,scaleFactor, minNeighbors, minSize)`
參數(shù)說明:文章來源:http://www.zghlxwxcb.cn/news/detail-493767.html
- 圖片對象:待識別圖片對象;
scaleFactor
:圖像縮放比例;minNeighbors
:對特征檢測點周邊多少有效點同時檢測,這樣可避免因選取的特征檢測點太小而導(dǎo)致遺漏;minSize
:特征檢測點的最小尺寸,可選參數(shù)。
import cv2
img=cv2.imread('1.png',1)
grayimg=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(grayimg, 1.2, 5)
for (x,y,w,h) in faces:
print((x,y,w,h))
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 6)
cv2.imshow('demo',img)
cv2.imwrite('out.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
文章來源地址http://www.zghlxwxcb.cn/news/detail-493767.html
攝像頭實時識別
import cv2
import numpy as np
capture = cv2.VideoCapture(0)
if capture.isOpened():
while True:
ret, frame = capture.read()
grayimg = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(grayimg, 1.2, 5)
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
capture.release()
break
cv2.destroyAllWindows()
到了這里,關(guān)于OpenCV-Python:簡單實現(xiàn)人臉識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!