淘寶看到一款很便宜的雙目,150元,就買了。想着用它學習一下opencv,好換個工做。固然,也想着可否用它作一些好玩的,好比三維重建之類高大上的東西。先用便宜的入個門,等之後眼界高了再看是否是買那些更加精密的雙目。不過目前來看,這個攝像頭仍是很不錯的。html
這個雙目攝像頭用win10自帶的攝像頭驅動能夠完美的打開,支持它的各類比例和分辨率的視頻顯示。分辨率支持如下幾種:算法
16:9 1280x720
4:3 640x480
4:3 320x240
8:3 1280x480
8:3 640x240
32:9 2560x720ide
但是在win下面的使用anaconda環境+Python版本opencv 只能驅動顯示單個攝像頭,一旦更改雙目的分辨率就會報錯,網上找了很久資料也沒解決,就一直用錄製好的雙目視頻和雙目照片來學習。學習
這幾天在家,就掏出吃灰已久的jetson TX2開發板試試,沒想到完美運行。人工智能
jetsonTX2爲NVIDIA的人工智能開發板,網上有詳細的介紹,也有豐富的資料和教程。spa
使用本開發板時,要先刷機(這個過程很漫長......),我記得當時刷了好幾遍,(有一次是沒刷完我覺得刷好了,因此要耐心等待。)而後安裝各類環境,包括opencv、numpy等。.net
安裝opencv時要先裝上cmake,而後使用這個裏面的腳本安裝,很方便:https://www.ncnynl.com/archives/201706/1760.html3d
這個開發板只有一個USB口,因此要準備一個USB HUB。code
插上雙目後,使用 ls -la /dev/vid* 命令查看,當出現 /dev/video0 和 /dev/video1 兩個攝像頭時,說明識別正確。其中video1就是咱們的雙目,video0是板子自帶的攝像頭,可能我驅動沒裝好,自帶的攝像頭不能用。視頻
人臉檢測使用Haar級聯算法檢測,因此須要用於人臉檢測的XML文件。具體見 附件。解壓後,替換程序中文件夾的絕對路徑。
代碼很簡單:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue May 7 13:37:49 2019 4 5 @author: 執念執戰 6 """ 7 import cv2 8 camercapture=cv2.VideoCapture(1)#video1 爲本雙目攝像頭 9 10 """ 11 本雙目支持的分辨率 12 16:9 1280x720 13 4:3 640x480 14 320x240 15 8:3 1280x480 16 640x240 17 32:9 2560x720 18 """ 19 camercapture.set(3,1280) #設置分辨率 20 camercapture.set(4,480) 21 cv2.namedWindow('pic1') 22 cv2.namedWindow('pic2') 23 success,frame=camercapture.read() #獲得原始圖像 24 face_cascade=cv2.CascadeClassifier('/media/nvidia/Ubuntu-Kyli/Opencv/pycv-master/pycv-master/pycv-master/chapter5/cascades/haarcascade_frontalface_default.xml') 25 #Haar數據包的絕對地址,請更改成本身的地址 26 27 while True: 28 if cv2.waitKey(int(1000/30)) & 0xff == ord("q"): #按下 q 鍵退出 29 break 30 #cv2.imshow('Test',frame) #顯示原始圖像 31 pic1=cv2.cvtColor(frame[0:480,0:640],cv2.COLOR_BGR2GRAY) #將圖像按照左右分割爲兩部分,並轉化爲灰度圖 32 pic2=cv2.cvtColor(frame[0:480,640:1280],cv2.COLOR_BGR2GRAY) 33 34 faces1=face_cascade.detectMultiScale(pic1,1.3,5)#分別對左右兩部分作人臉檢測 35 faces2=face_cascade.detectMultiScale(pic2,1.3,5) 36 for (x,y,w,h) in faces1: 37 pic1=cv2.rectangle(pic1,(x,y),(x+w,y+h),(255,0,0),-1)#在灰度圖上畫出人臉區域,此處使用填充的矩形,遮擋人臉 38 for (x,y,w,h) in faces2: 39 pic2=cv2.rectangle(pic2,(x,y),(x+w,y+h),(255,0,0),-1) 40 41 cv2.imshow("pic1",pic1)#分別顯示檢測後的圖像 42 cv2.imshow("pic2",pic2) 43 success,frame=camercapture.read()#獲取下一幀的原始圖像 44 45 cv2.destroyAllWindows()#銷燬窗口 46 camercapture.release() #釋放攝像頭
運行效果以下:
原始圖像也一塊兒顯示效果以下:
本文水平有限,內容不少詞語因爲知識水平問題不嚴謹或很離譜,但主要做爲記錄做用,能理解就行了,但願之後的本身和路過的大神對必要的錯誤提出批評與指點,對好笑的錯誤不要嘲笑,指出來我會改正的。
另外,轉載使用請註明出處。
-------------隨夢,隨心,隨願,執念執戰,執戰蒼天!