OpenCV是什么?
發(fā)布時間:2021-04-29 11:03:05
OpenCV是什么
在說OpenCV之前要說一下什么是計算機視覺,計算機視覺是在圖像基礎(chǔ)上發(fā)展起來的一門新興學(xué)科,計算機視覺是研究讓機器如何看世界,認識這個五彩繽紛的世界,就是讓攝像頭代替人眼來對目標進行識別,跟蹤和測量,并進一步對捕獲的圖像數(shù)據(jù)(視頻數(shù)據(jù))轉(zhuǎn)換成一種新的表達方式或者一個新的決策的過程!在轉(zhuǎn)換過程中進行的轉(zhuǎn)換都是為了達到某一目標。
舉個列子:通過輸入設(shè)備(攝像頭、掃描儀)將前方1米處發(fā)現(xiàn)的物體輸入到電腦中,并對這些數(shù)據(jù)進行處理,然后與數(shù)據(jù)庫里的模型比對,那么最后得到的決策可能是前方有一輛汽車或者站著一個人,處理的過程可能是把彩色圖像轉(zhuǎn)換成單通道的灰色圖(灰色圖要比彩色圖容易處理后面會說為什么),對圖像降噪聲,或者通過圖像序列分析去除攝像機晃動的影響,這些轉(zhuǎn)換過程/處理過程最終將會轉(zhuǎn)換成一種新的決策,表達方式!
隨著計算機視覺的誕生,人工智能技術(shù)也隨著和誕生,其中人工智能技術(shù)中生物識別技術(shù)能從計算機處理的圖像數(shù)據(jù)(多維數(shù)據(jù))中獲取信息,并對這個信息進行識別,并做相應(yīng)的處理,人工智能領(lǐng)域下有很多技術(shù)比如最著名的機器學(xué)習(xí)等等這里就不做太多的詳細介紹,后面學(xué)到機器學(xué)習(xí)時會和大家詳細介紹人工智能技術(shù)下各個領(lǐng)域作用!
因為計算機視覺是計算機學(xué)科所以在、工程、信號處理、物理學(xué)、應(yīng)用數(shù)學(xué)和統(tǒng)計學(xué)、神經(jīng)生理學(xué)和認知科學(xué)等都有研究方面,在制造業(yè)、檢驗、文檔分析、醫(yī)療診斷、和軍事等領(lǐng)域等各種智能/自主應(yīng)用方面,都有非常廣闊的前景發(fā)展!
人類本身是視覺動物,所以人類覺得可以很容易實現(xiàn)計算機視覺,假如說讓你從一個場景中找到一輛汽車,顯然很容易,因為汽車本身較大,容易被眼睛所捕獲,但是其中在捕獲的過程中有著很復(fù)雜的過程:
人腦將視覺信號劃分入很多個通道,將各種不同的信息輸入你的大腦。你的大腦有一個關(guān)注系統(tǒng),會根據(jù)任務(wù)識別出場景的重要部分,并做重點分析,而其他部分則分析的較少。在人類視覺流中存在著大量的反饋,但是目前人類對之了解甚少。肌肉控制的傳感器以及其他所有傳感器的輸入信息之間存在著廣泛的關(guān)聯(lián),這使得大腦可以依賴從出生以來所學(xué)到的信息,在大腦中反饋信息。
所以我們要想真正的實現(xiàn)一個人工智能產(chǎn)品的話就要把人類自己本身的所有信息模擬到計算機上,比如大腦=CPU,眼睛=攝像頭,感官=傳感器,并且要讓之間協(xié)調(diào)工作,相對來說是非常復(fù)雜的!
其次計算機接受到的數(shù)據(jù)主要來源于攝像頭,磁盤文件中的數(shù)值矩陣:
圖1.1(取之《學(xué)習(xí)OpenCV》)中的汽車有一個反光鏡但是計算機只看到一組數(shù)值矩陣:
圖1.1
由于該圖是單通道(黑白圖)所以一個矩陣數(shù)值就可以表示一個像素點,如果是多通道的RGB顏色就需要三個數(shù)值表示,比如194210 201表示一個像素點,而單通道194就可以表示像素點!
其中非常令人頭疼的問題就是圖像噪聲:
左:正常圖片右:帶圖像噪聲的圖片
如果一張圖里每個像素點上都摻雜著圖像噪聲的話會降低圖像識別的準確率,圖像噪聲產(chǎn)生的問題主要來自輸入設(shè)備(攝像機)。
假如我們要做一個能夠自動把房間里掉地上的書撿起來放到書架上,那么我們需要從這個房間場景中找出我們所需要的目標物品:書。
假如說這個人的房間非常大或者在客廳,那么時首先如果從右到左或者從左到右采用地毯式的搜索的話會需要進行大量的分析算法同時因為CPU運算單元會進行過多的算法運算一直處于高電平狀態(tài)。會加快消耗機器人的電能,在這樣的情況下我們可以告訴機器人書一般會在某個地方出現(xiàn):書柜、桌子、床上,沙發(fā)的周邊地區(qū)。然后將這三個模型導(dǎo)入到撿書機器人的比對數(shù)據(jù)庫里,首先一點是在拍攝這些配對模型時,要將物品放到最能表現(xiàn)其特征的地方:“正中心位置”。
有了這些信息之后那么機器人可以很快的過濾掉場景中書籍不可能會掉落的地方,那么機器人可以很快的找出書籍并放到書架上!當(dāng)然你也可以給機器人安裝激光掃描儀使其捕獲的物品體積使其在機器訓(xùn)練時用捕獲的數(shù)據(jù)與模型數(shù)據(jù)進行校正時更加準確!
就像上面說的,要從一個房間里找到書可以根據(jù)特征來尋找加快尋找時間,那么在找到一個目標時首先要將這個目標轉(zhuǎn)換成二維圖,也就是說三維圖是立體的,存在前后之分,而二維圖不存在前后之分,只有寬高,為什么要轉(zhuǎn)換成二維圖?
二維圖的方法就是從一個三維圖(立體)中根據(jù)二維特征(平面)將二維數(shù)據(jù)提取出來并映射到另外一個圖像數(shù)據(jù)上!
可以看到二維圖可以更好的方便識別所需表面特征!
OpenCV是計算機視覺開源庫,主要算法涉及圖像處理和機器學(xué)習(xí)相關(guān)方法。可以運行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。
OpenCV用C++語言編寫,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要傾向于實時視覺應(yīng)用,并在可用時利用MMX和SSE指令, 如今也提供對于C#、Ch、Ruby,GO的支持。
最新版本是OpenCV4.5.1,Opencv采用C/C++編寫在不同的系統(tǒng)環(huán)境上只要稍微修改一下代碼就可以編譯通過,可以在Mac/Linux/Windows系統(tǒng)上運行,并且為python,Ruby,MATLAB等編程語言提供接口!
OpenCV在設(shè)計時的目標就是執(zhí)行速度盡量快所以內(nèi)部函數(shù)都是標C函數(shù)來編寫的,如果想要起到硬件加速(內(nèi)部函數(shù)用IPP優(yōu)化)需要購買IPP庫,購買IPP庫后OpenCV在運行時會自動調(diào)用IPP庫做優(yōu)化!
目前OpenCV應(yīng)用領(lǐng)域非常廣泛,在醫(yī)療設(shè)備、工廠檢驗、立體視覺、機器學(xué)習(xí)、人臉別識別、圖像拼接、生物醫(yī)學(xué)分析、無人機、等人工智能領(lǐng)域有廣泛應(yīng)用,OpenCV可謂大顯身手,而這些,僅僅是其應(yīng)用的冰山一角!
甚至計算機視覺可以用在聲譜圖上,對聲音和音樂進行分析!
并且計算機視覺被廣泛應(yīng)用于工廠檢驗,大規(guī)模的產(chǎn)品制造在流水線上的某一環(huán)節(jié)都使用計算機視覺做檢測!
在多數(shù)圖像處理相關(guān)的應(yīng)用程序中被采用,BSD許可,可以免費應(yīng)用在商業(yè)和研究領(lǐng)域,OpenCV開源協(xié)議允許你使用OpenCV庫的全部代碼,生成商業(yè)產(chǎn)品,并且不需要公開源代碼,或?qū)penCV庫中的算法改善后的算法!
如今,來自世界各地的各大公司、科研機構(gòu)的研究人員,共同維護支持著opencv的開源庫開發(fā)。這些公司和機構(gòu)包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋等。
在學(xué)習(xí)OpenCV之前要懂得C/C++編程,和一些數(shù)學(xué)基礎(chǔ)!
- 上一篇:Linux模擬實現(xiàn)僵尸進程
- 下一篇:關(guān)于死鎖的一系列問題