經常碰到朋友,尤其是電腦視覺初學者朋友問到我關於OpenCV怎麼擷取圖片,怎麼把OpenCV跟相機結合起來這一類的問題。本人不才,不過,在平時的工作中,都接觸到這方面,今天特意發文章給有些朋友們解惑一下。
我們做視頻分析或者說監控行業用的相機,一般來說,有兩種:(1)類比相機;(2)數位相機;
類比相機,輸出的是類比訊號,也就是電壓的高低訊號。這種相機,現在用在很多的監控場合,例如在銀行,當你坐在櫃檯前的時候,你的頭頂上一般會有一個相機對著你的,據筆者觀察,其中的大部分,目前都屬於類比相機;這種類比相機的輸出一般可以通過AV訊號線串連到電視上,也就是說,可以用一根訊號線,把相機拍攝的圖片用電視機顯示出來。類比相機還在馬路邊,小區門口的監控室(一般都是用這種相機)等場合見到。類比相機得到的資料,在進入電腦進行儲存、顯示、處理之前,需要轉換為數字訊號(PC只能處理離散的數字訊號)。所以,類比相機在PC端,一般都有PCI介面的視頻轉接卡,這種視頻轉接卡,專業術語叫做“視頻採集卡”。例如,海康視頻採集卡;大華視頻採集卡;天敏視頻採集卡等,都屬於這一類; 通過它,類比相機的類比訊號就轉換為數字訊號。換句話說,就變成了JPG,BMP等格式的圖片,進而就可以被PC來顯示、處理了。
數位相機,目前,常用的就只有RJ45介面和USB介面這兩種形式,也有個別相機採用1394介面的。RJ45介面,也就是我們上網用的網線介面,USB介面不用說,相信大家聊QQ都用過。數位相機,可以直接產生JPG或者BMP格式的圖片。不過,為了網路傳輸的快捷,一般都以MPEG或者h.264視頻流的格式進行網路傳輸。一般來說,採用RJ45介面數位相機進行開發的時候,相機的出售方,會給你提供該相機的SDK,通過該SDK,你就可以擷取相機發給PC端的網路資料包,通過解壓該資料包(在相機SDK都提供),那麼,你就獲得了一幀一幀的JPG或者BMP格式的圖片。如果相機的SDK最終提供給你的是JPG格式,那麼,你還需要在記憶體裡面把它解壓為BMP格式,然後,才能用Opencv的iplimage格式進行處理。如果是BMP格式,直接賦值給IPLIMAGE就Ok了。另外,USB介面的數位相機(也就是我們平常聊QQ用的網路攝影機),可以通過直接調用opencv的函數(其實,內部是調用了windows的VFW)來擷取iplimage格式的資料,剩下的,就是採用opencv進行處理了。。
相機與PC的串連方式,可以簡單的表述為下面的圖:
總結一下,相機只是一個圖片資料擷取工具,擷取了圖片之後,需要把這些圖片“傳遞”給PC、DSP、ARM等處理終端,然後,在處理終端上,針對不同的需求,調用不同的OpenCV函數就能解決你的問題了。。