機器學習 opencv 人臉識別

2021-09-29 10:33:43 字數 3737 閱讀 7987

鑑於本人的工作環境主要是採用python作為開發工具,故本篇部落格是基於python來做的學習記錄。

1. 讀取,將其轉換為陣列

from matplotlib import pyplot as pyl

import cv2

import numpy

img = cv2.imread("cat.jpg") #img是乙個numpy.ndarray物件,預設是以bgr三通道讀取資料(三維陣列)

#img_gray = cv2.imread("cat.jpg",cv2.imread_grayscale) 以灰度影象方式讀取資料(二維陣列)

2. 陣列資料轉換

img_gray = cv2.cvtcolor(img,cv2.color_bgr2gray) #將其轉換為灰度的二維陣列資料3. 陣列資料視窗展示

cv2.waitkey(0) # 按任意鍵關閉視窗,cv2.waitkey(1000) 延時一秒關閉視窗

cv2.destroyallwindows()4. 影象儲存

cv2.imwrite("mycat.jpg",img)
5. 影象的擷取

# 其實本質就是對np陣列進行操作

cv2.imshow("image",img[:100,:200]) # 取前100行,前200列的畫素作為影象展示

6. bgr資料切片

# 切片

b,g,r = cv2.split(img) # 得到各自顏色通道的二維陣列資料

# 合併

img = cv2.merge(b,g,r)7 同樣大小的陣列畫素值運算

img_2 = numpy.copy(img)

# np相加,畫素值只要超過255,就減掉255,比如257,結果就為2

print(img[:3,:3,0]+img_2[:3,:3,0] )

# cv2相加,畫素值超過255,就等於255

print(cv2.add(img[:3,:3,0],img_2[:3,:3,0]))8 的融合

ret = cv2.addweighted(img_cat,0.2,img_dog,0.8,0) # 資料後面的值決定融合和所佔的權重

cv2.imshow("image",ret)

cv2.waitkey(0) # 按任意鍵關閉視窗,cv2.waitkey(1000) 延時一秒關閉視窗

cv2.destroyallwindows()

# 如果大小不一致,使用cv2.resize(img_xx,(300,200)) ————》轉換為np.shape = 200,300的陣列9 的比例縮放

ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #橫向拉長三倍

ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #擴大三

import numpy as np

import cv2

import os

filenames = os.listdir('./faces/')

faces =

# targerts == labels標籤

targets =

for f in filenames:

for fn in os.listdir('./faces/%s'%(f)):

faces = np.asarray(faces)

targets = np.asarray(targets)

len(targets)

#60/

labels = np.asarray([i for i in range(1,7)]*10)

labels.sort()

labels

array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,

3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5,

5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6])

# face-recognizer人臉的識別

# eigen特徵,根據特徵值相似,認為同乙個人

fr = cv2.face.eigenfacerecognizer_create()

labels_train = labels[::2]

len(labels_train)

#30faces_train = faces[::2]

len(faces_train)

#30# faces_train2=

# for face in faces_train:

# gray = cv2.cvtcolor(face,cv2.color_bgr2bgra)

# 灰度化處理

faces_train2 =

for face in faces_train:

gray = cv2.cvtcolor(face,cv2.color_bgr2gray)

faces_train2 = np.asarray(faces_train2)

faces_train2.shape

#(30, 64, 64)

# 訓練

fr.train(faces_train2,labels_train)

face_test = faces[1::2]

#叫什麼名字的標籤

labels_test =labels[1::2]

targets_labels =targets[::10]

for face in face_test:

gray = cv2.cvtcolor(face,cv2.color_rgb2gray)

# 1 ~ 20

label,confidence = fr.predict(gray)

cv2.imshow(targets_labels[label-1],face)

print(label,confidence)

print('------------------',targets_labels[label-1])

cv2.waitkey(1000)

cv2.destroyallwindows()

print(targets_labels)

學習opencv 人臉識別

在opencv中提供了許多成熟的介面,其中乙個就是人臉識別,先看看效果圖。可以看出用opencv自帶的樣本就能很方便的識別出人臉。opencv有已經自帶了人臉的haar特徵分類器。在目錄 opencv sources data haarcascades 下面。可以看出裡面還有很多分類器,識別左耳 右...

OpenCv人臉識別

在進行人臉識別時候,為了達到效果,我們使用opencv的分類器。進行對進行識別。include include include include using namespace cv using namespace std void detectanddraw mat img,cascadeclass...

opencv人臉識別

在python環境下利用opencv實現人臉識別,接下來一步一步動手操作。預備知識 一 環境準備 如果已經準備好了請跳過。0,第一步安裝numpy和matplotlib pip install upgrade setuptools pip install numpy matplotlib 1,pip...