計算機視覺是利用計算機軟硬體對人類視覺進行建模和複製。在本章中,您將詳細了解這一點。
Computer Vision
計算機視覺是一門研究如何從二維圖像中重建、中斷和理解三維場景的學科。
Computer Vision Hierarchy
計算機視覺分爲以下三個基本範疇:減號;
低水平視覺包括用於特徵提取的處理圖像。
中級視覺包括物體識別和三維場景解釋
高級視覺包括對場景類活動、意圖和行爲的概念性描述。
Computer Vision Vs Image Processing
圖像處理研究圖像到圖像的轉換。圖像處理的輸入和輸出都是圖像。
計算機視覺是從物體的圖像中對其進行明確、有意義的描述。計算機視覺的輸出是對三維場景中結構的描述或解釋。
Applications
計算機視覺在以下領域有著廣泛的應用;
機器人(機器人)
定位自動確定機器人位置
導航
障礙迴避
裝配(銷釘孔、焊接、噴漆)
操縱(例如美洲獅機器人操縱器)
人機互動(HRI):與人交互並爲人服務的智能機器人
醫學
分類和檢測(如病變或細胞分類和腫瘤檢測)
二維/三維分割
三維人體器官重建(MRI或超聲波)
視覺引導機器人外科
Security/
- Biometrics (iris, finger print, face recognition)
- Surveillance-detecting certain suspicious activities or behaviors
運輸
- Autonomous vehicle
- Safety, e.g., driver vigilance monitoring
工業自動化應用
- Industrial inspection (defect detection)
- Assembly
- Barcode and package label reading
- Object sorting
- Document understanding (e.g. OCR)
Installing Useful Packages
對於使用Python的計算機視覺,您可以使用一個流行的庫OpenCV(開源計算機視覺)。它是一個主要針對實時計算機視覺的編程函數庫。它是用C++編寫的,其主要接口是C++。您可以使用以下命令幫助安裝此軟體包−
pip install opencv_python-X.X-cp36-cp36m-winX.whl
這裡X表示安裝在您的機器上的Python版本以及您擁有的win32或64位。
如果您使用的是anaconda環境,請使用以下命令安裝OpenCV−
conda install -c conda-forge opencv
Reading, Writing and Displaying an Image
大多數CV應用程式需要獲取圖像作爲輸入,生成圖像作爲輸出。在本節中,您將學習如何藉助OpenCV提供的函數讀寫圖像文件。
OpenCV functions for Reading, Showing, Writing an Image File
OpenCV爲此提供了以下函數−
imread()函數−這是用於讀取圖像的函數。OpenCV imread()支持多種圖像格式,如PNG、JPEG、JPG、TIFF等。
imshow()函數−這是用於在窗口中顯示圖像的函數。窗口自動適應圖像大小。OpenCV imshow()支持多種圖像格式,如PNG、JPEG、JPG、TIFF等。
imwrite()函數−這是用於寫入圖像的函數。OpenCV imwrite()支持多種圖像格式,如PNG、JPEG、JPG、TIFF等。
Example
本例顯示了Python代碼,用於以一種格式讀取圖像,並在窗口中顯示圖像,以另一種格式寫入相同的圖像。考慮下面顯示的步驟&負;
導入OpenCV包,如圖所示−
import cv2
現在,要讀取特定的圖像,請使用imread()函數−
image = cv2.imread('image_flower.jpg')
要顯示圖像,請使用imshow()函數。您可以在其中看到圖像的窗口的名稱將是image\u flower。
cv2.imshow('image_flower',image) cv2.destroyAllwindows()
現在,我們可以使用imwrite()函數將相同的圖像寫入其他格式,例如.png;
cv2.imwrite('image_flower.png',image)
如果輸出爲True,則表示圖像已成功寫入同一文件夾中的.png文件。
True
注意:函數destroyallWindows()只會銷毀我們創建的所有窗口。
Color Space Conversion
在OpenCV中,圖像不是使用傳統的RGB顏色存儲的,而是以相反的順序存儲,即以BGR順序存儲。因此,讀取圖像時的默認顏色代碼是BGR。中的顏色轉換函數,用於將圖像從一個顏色代碼轉換爲另一個顏色代碼。
Example
考慮這個例子將圖像從BGR轉換爲灰度。
導入OpenCV包,如圖所示−
import cv2
現在,要讀取特定的圖像,請使用imread()函數−
image = cv2.imread('image_flower.jpg')
現在,如果我們使用imshow()函數看到這個圖像,那麼我們可以看到這個圖像在BGR中。
cv2.imshow('BGR_Penguins',image)
現在,使用cvtColor()函數將此圖像轉換爲灰度。
image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) cv2.imshow('gray_penguins',image)
Edge Detection
人類在看到一幅草圖後,可以很容易地識別出許多物體類型和它們的姿勢。這就是爲什麼邊緣在人類生活和計算機視覺應用中起著重要作用的原因。OpenCV提供了一個非常簡單和有用的函數來檢測邊緣。
Example
下面的示例顯示了邊緣的清晰標識。
導入OpenCV包,如圖所示−
import cv2 import numpy as np
現在,要讀取特定圖像,請使用imread()函數。
image = cv2.imread('Penguins.jpg')
現在,使用Canny()函數檢測已讀取圖像的邊緣。
cv2.imwrite(『edges_Penguins.jpg』,cv2.Canny(image,200,300))
現在,要顯示帶邊的圖像,請使用imshow()函數。
cv2.imshow(『edges』, cv2.imread(『『edges_Penguins.jpg』))
這個Python程序將創建一個名爲edges_penguins.jpg的帶有邊緣檢測的圖像。
Face Detection
人臉檢測是計算機視覺的一個迷人的應用,它使人臉檢測更具現實感和未來感。OpenCV有一個內置的設備來執行人臉檢測。我們將使用Haar級聯分類器進行人臉檢測。
Haar Cascade Data
我們需要數據來使用Haar級聯分類器。您可以在我們的OpenCV包中找到這些數據。安裝OpenCv之後,您可以看到文件夾名haarcascades。會有不同應用程式的.xml文件。現在,將它們複製到不同的用途,然後粘貼到當前項目下的新文件夾中。
示例
下面是Python代碼,使用Haar Cascade檢測阿彌陀佛Bachan的面部,如下圖所示−
導入OpenCV包,如圖所示−
import cv2 import numpy as np
現在,使用haarcascadescifier來檢測人臉−
face_detection= cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/ haarcascade_frontalface_default.xml')
現在,對於讀取特定圖像,使用imread()函數−
img = cv2.imread('AB.jpg')
現在,將其轉換爲灰度,因爲它將接受灰度圖像;
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
現在,使用face_detection.detectMultiScale執行實際的面部檢測
faces = face_detection.detectMultiScale(gray, 1.3, 5)
現在,在整張臉上畫一個矩形;
for (x,y,w,h) in faces: img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3) cv2.imwrite('Face_AB.jpg',img)
這個Python程序將創建一個名爲Face_AB.jpg的圖像,其中包含人臉檢測,如圖所示
Eye Detection
眼睛檢測是計算機視覺的另一個迷人的應用,它使它更現實,也更具未來感。OpenCV有一個內置的設備來執行眼睛檢測。我們將使用Haar級聯分類器進行眼睛檢測。
Example
下面的示例給出了使用Haar Cascade的Python代碼來檢測下圖中給出的阿米塔巴坎的臉−
導入OpenCV包,如圖所示−
import cv2 import numpy as np
現在,使用haarcascadescifier來檢測人臉−
eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')
現在,要讀取特定圖像,請使用imread()函數
img = cv2.imread('AB_Eye.jpg')
現在,將其轉換爲灰度,因爲它可以接受灰度圖像;
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
現在,藉助於眼睛級聯。detectMultiScale,執行實際的面部檢測
eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)
現在,在整張臉上畫一個矩形;
for (ex,ey,ew,eh) in eyes: img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2) cv2.imwrite('Eye_AB.jpg',img)
這個Python程序將創建一個名爲Eye_AB.jpg的圖像,其中的眼睛檢測如圖所示−