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