【机器学习】opencv-人脸识别
生活随笔
收集整理的這篇文章主要介紹了
【机器学习】opencv-人脸识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 . opencv是什么及其作用?
OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法(百度百科)。
鑒于本人的工作環境主要是采用python作為開發工具,故本篇博客是基于python來做的學習記錄。
?
二 . 環境依賴和opencv包
- 環境:python3.65+windows10
- 包:opencv-python、opencv-contrib-python(pip安裝)
- 說明:裝好python以后,直接在cmd里面使用pip install 即可,若遇見下載速度過慢或超時的情況,建議換個pip源,使用方式如:pip install package -i??https://pypi.tuna.tsinghua.edu.cn/simple/
1. 讀取圖片,將其轉換為數組
from matplotlib import pyplot as pyl import cv2 import numpyimg = cv2.imread("cat.jpg") #img是一個numpy.ndarray對象,默認是以BGR三通道讀取圖片數據(三維數組) #img_gray = cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE) 以灰度圖像方式讀取圖片數據(二維數組)?
2. 數組數據轉換
img_BGR = cv2.imread("cat.jpg") img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #將其轉換為灰度的二維數組數據?
3. 數組數據窗口展示
img = cv2.imread("cat.jpg")cv2.imshow("IMage",img) cv2.waitKey(0) # 按任意鍵關閉窗口,cv2.waitKey(1000) 延時一秒關閉窗口 cv2.destroyAllWindows()?
4. 圖像保存
cv2.imwrite("mycat.jpg",img)?
5. 圖像的截取
# 其實本質就是對np數組進行操作 img = cv2.imread("cat.jpg") cv2.imshow("IMage",img[:100,:200]) # 取前100行,前200列的像素作為圖像展示?
?6. BGR數據切片
img = cv2.imread("cat.jpg")# 切片 b,g,r = cv2.split(img) # 得到各自顏色通道的二維數組數據# 合并 img = cv2.merge(b,g,r)?7 同樣大小的數組像素值運算
img = cv2.imread("cat.jpg") 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 圖片的融合
img_cat = cv2.imread("cat.jpg") img_dog = cv2.imread("dog.jpg")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 圖片的比例縮放
img_cat = cv2.imread("cat.jpg")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 npimport cv2import os filenames = os.listdir('./faces/') faces = [] # targerts == labels標簽 targets = [] for f in filenames:for fn in os.listdir('./faces/%s'%(f)):faces.append(cv2.imread('./faces/%s/%s'%(f,fn)))targets.append(f.split('.')[0]) 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) #30 faces_train = faces[::2] len(faces_train) #30 # faces_train2=[] # for face in faces_train: # gray = cv2.cvtColor(face,cv2.COLOR_BGR2BGRA) # faces_train2.append(gray) # 灰度化處理 faces_train2 = [] for face in faces_train:gray = cv2.cvtColor(face,cv2.COLOR_BGR2GRAY)faces_train2.append(gray) 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 ~ 20label,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-人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秋名山直播php源码,【斗鱼直播源】浏览
- 下一篇: 和利时dcs系统服务器设置,和利时DCS