【機器學習】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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456222.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于java中的集合如何刪除一個元素。

我們有三種方法可以刪除集合中的元素&#xff0c;下面介紹兩種方法&#xff0c; 一種是傳統的for循環&#xff0c;另一種是使用Iterator迭代器(推薦使用)&#xff0c;簡單的介紹如下&#xff1a; for循環刪除元素: public class ForRemove<T>{ public void forDelete(…

她說程序員不懂浪漫,生日宴上慘變單身狗,其實,程序員的浪漫你不懂!

css蛋糕誰說程序員不懂得浪漫&#xff0c;只是程序員的浪漫你不懂&#xff01;PS&#xff1a;人家都不懂&#xff0c;你再浪漫有啥用&#xff0c;最后還不是單身狗&#xff1f;說實在的&#xff0c;以前也分享過一個程序員用純CSS畫的一個MAC&#xff0c;代碼就三千多行&#x…

H.264 picture parameter sets成員值含義學習筆記

-picture parameter sets1. pic_parameter_set_idpic_parameter_set_id指明了在切片頭中對應的某個psp.pic_parameter_set_id的值應該在0到255,包括0和2552. seq_parameter_set_idset_parameter_set_id表示激活的sps.seq_parameter_set_id應該取值在0到31之間,包括邊界值.3. en…

【機器學習】opencv-數據預處理

想要將收集好的數據s進行統一命名 數量整理 就需要提前進行預處理 import numpy as npimport osimport randomimport cv2 # wuao文件名修改&#xff0c;1~10文件名 filename os.listdir(./faces/wuao/) for i,name in enumerate(filename):os.rename(./faces/wuao/%s%(name)…

WIN7如何替換開機登錄畫面

1 把你的圖片保存為backgroundDefault.jpg,并確保和你的屏幕分辨率相同 2 把下面的代碼另存為開啟自定義登錄界面.reg&#xff08;注意格式為ASCII格式&#xff09; Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\A…

Resharper 安裝以及破解

首先進行軟件安裝 安裝后 解壓下載好的 文件 會得到如下&#xff1a; 打開序列號 會看到 然后 復制 %LocalAppData%\\JetBrains 路徑 會得到進入當前JetBrains 文件夾 然后搜索 JetBrains.Platform.Shell.dll 會得到這個文件 點擊屬性 查看到后半段的地址 \AppData\Local\JetB…

【機器學習】圖片中的人臉識別

通過opencv三方庫進行圖片人臉識別 face_zones中的參數可以自行調試,這三個data都可以用于人臉識別 haarcascade_frontalface_default.xmlhaarcascade_frontalface_alt.xmlhaarcascade_frontalface_alt2.xml import numpy as npimport cv2img cv2.imread(./2ren.jpg) img.s…

Android Fragment

Fragment在3.0后增加&#xff1a;android.app.Fragment。在v4的兼容包里也有。 一般為了兼容性還是可能會用&#xff1a;android.support.v4.app.Fragment 生命周期&#xff1a; onAttach,onCreate,onCreateView,onActivityCreated,onStart,onResume, onPause,onStop,onDestroy…

1020. 月餅 (25)

1020. 月餅 (25) 月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給出的情形…

【機器學習】opencv-視頻中的人臉檢測

本次在圖片識別的程度上增添了視頻識別 原理就是在圖片的基礎上進行操作 每毫秒進行下一幀的人臉解析識別&#xff0c;時間可自行設置 import numpy as np import cv2win cv2.namedWindow(dzd,cv2.WINDOW_NORMAL) cv2.resizeWindow(dzd,640,200) rose cv2.imread(./rose.jp…

scan8[16+2*4]的內容

scan8確實不好理解&#xff0c;解答如下&#xff1a; static const int x264_scan8[162*4] { /* Luma */ 41*8, 51*8, 42*8, 52*8, 61*8, 71*8, 62*8, 72*8, 43*8, 53*8, 44*8, 54*8, 63*8, 73*8, 64*8, 74*8, /* Cb */ 11*8, 21*8, 12*8, 22*8, /…

React 產品實現 -任務管理工具“氫”

原文地址&#xff1a;https://zhuanlan.zhihu.com/p/...&#xff0c;歡迎轉載 &#xff1a;-&#xff09;? 關于 其實對于這個專欄的訂閱用戶感到非常抱歉&#xff0c;已經停更很久了&#xff0c;也沒啥特別的理由就是懶 orz&#xff01;不對&#xff0c;畫風不能這樣開頭&…

通過curl獲取網頁訪問時間

curl -w %{time_namelookup}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download}"\n" "https://www.google.com" 轉載于:https://www.cnblogs.com/fanxuanhui-linux/p/6581292.html

【numpy】20道numpy題目

1、創建一個長度為10的一維全為0的ndarray對象&#xff0c;然后讓第5個元素等于1 import numpy as npndarry np.zeros(10) ndarryarray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])ndarry[4]1 ndarryarray([0., 0., 0., 0., 1., 0., 0., 0., 0., 0.])2、創建一個元素為從10到4…

ffmpeg_intra_pred_mode問題.pdf

ffmpeg_intra_pred_mode問題.pdf文章

【R】語言第一課-----安裝

安裝R和Rstuido軟件 R語言是用于統計分析&#xff0c;圖形表示和報告的編程語言和軟件環境&#xff1b;Rstudio是編輯、運行R語言的最為理想的工具之一。 1、官網下載R安裝包 下載地址為&#xff1a;https://cran.r-project.org 進入鏈接&#xff0c;如下圖所示&#xff0c…

面向對象基礎知識整理

1、什么是對象&#xff1f; 什么是類&#xff1f; 對象是可以看的見摸得著的&#xff0c;對象可以是任何東西&#xff0c;比如水杯&#xff0c;書&#xff0c;手機等。準確的說&#xff0c;對象是一個自包含的實體&#xff0c;用一組可識別的特性和行為標識的。 類就是具有相同…

Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes values. (ie, from left to right, level by level). For example: Given binary tree {3,9,20,#,#,15,7}, 3/ \9 20/ \15 7return its level order traversal as: [[3],[9,20],[15,7] ] 解題思路:能夠…

鍵盤事件相關

轉自下面兩個鏈接&#xff1a;http://www.cnblogs.com/starof/p/6558581.html http://www.cnblogs.com/cathsfz/archive/2011/05/29/2062382.html 在 JavaScript 中監聽 IME 鍵盤輸入事件 在 JavaScript 中監聽用戶的鍵盤輸入是很容易的事情&#xff0c;但用戶一旦使用了輸入…

【R】語言第二課----- 變量的使用方法

num1<-c(9.1,8.2,7.3) num2<-1:10 char<-c(a,b,c) #單引號or雙引號都可以 logit<-c(TRUE,FALSE,T,F) c(1,a,TRUE) sex<-c(F,M,F,M) sex sexf<-factor(sex) sexf num1[1]<-100 #索引一定要加方括號 num1[c(1,3)]<-c(99.9,77.7) num1[c(T,F,T)] num1[-2]…