關于opencv
OpenCV 是 Intel 開源計算機視覺庫 (Computer Version) 。它由一系列 C 函數和少量 C++ 類構成,實現了圖像處理和計算機視覺方面的很多通用算法。
OpenCV 擁有包括 300 多個 C 函數的跨平臺的中、高層 API 。它不依賴于其它的外部庫 —— 盡管也可以使用某些外部庫。 OpenCV 對非商業應用和商業應用都是免費 的。同時 OpenCV 提供了對硬件的訪問,可以直接訪問攝像頭,并且 opencv 還提供了一個簡單的 GUI(graphics user interface) 系統 :highgui 。 我們就通過 OpenCV 提供的一些方法來構造出這個人臉檢測(face detection) 程序來。
opencv的python包裝
OpenCV 本身是有 C/C++ 編寫的,如果要在其他語言中使用,我們可以通過對其動態鏈接庫文件進行包裝即可,幸運的是, Python 下有很多個這樣的包裝,本文中使用的是 Cvtypes 。
事實上,在 Python 中很多的包都是來自第三方的,比如 PIL(Python Image Library) 即為 C 語言實現的一個圖形處理包,被包裝到了 Python 中,這些包裝可以讓你像使用 Python 的內建函數一樣的使用這些 API 。
人臉檢測原理
人臉檢測屬于目標檢測(object detection) 的一部分,主要涉及兩個方面
1.先對要檢測的目標對象進行概率統計,從而知道待檢測對象的一些特征,建立起目標檢測模型。
2.用得到的模型來匹配輸入的圖像,如果有匹配則輸出匹配的區域,否則什么也不做。
計算機視覺
計算機的視覺系統,跟人的眼睛是大不相同的,但是其中也有類似之處。人眼之能夠看到物體,是通過物體上反射出來的光線刺激人眼的感光細胞,然后視覺神經在大腦中形成物體的像。計算機通過攝像頭看到的東西要簡單的多,簡單來說,就是一堆由數字組成的矩陣。這些數字表明了物體發出的光的強弱,攝像頭的光敏元件將光信號轉化成數字信號,將其量化為矩陣。
如何從這些數字中得出:"這是一個人臉"的結論,是一個比較復雜的事情。物理世界是彩色的,一般來說,計算機中的彩色圖片都是由若干個色彩通道累積出來的,比如RGB模式的圖片,有紅色通道(Red),綠色通道(Green)和藍色通道(Blue),這三個通道都是灰度圖,比如一個點由8位來表示,則一個通道可以表示2^8=256個灰度。那樣三個通道進行疊加以后可以表3*8=24位種色彩,也就是我們常說的24位真彩。
對這樣的圖片做處理,無疑是一件很復雜的事,所以有必要先將彩色圖轉為灰度圖,那樣可以減少數據量(比如RGB模式,可以減少到原圖片的1/3),同時可以去掉一些噪聲信號。先將圖片轉化為灰度圖,然后將這個灰度圖的對比度增高,這樣可以使得圖片本來暗的地方更暗,亮的地方更亮一些。這樣處理以后,圖片就更容易被算法設別出來了。
新聞熱點
疑難解答