1、概述
在計(jì)算機(jī)視覺項(xiàng)目的開發(fā)中,OpenCV作為最大眾的開源庫(kù),擁有了豐富的常用圖像處理函數(shù)庫(kù),采用C/C++語(yǔ)言編寫,
可以運(yùn)行在Linux/Windows/Mac等操作系統(tǒng)上,能夠快速的實(shí)現(xiàn)一些圖像處理和識(shí)別的任務(wù)。此外,OpenCV還提供了java、
python、cuda等的使用接口、機(jī)器學(xué)習(xí)的基礎(chǔ)算法調(diào)用,從而使得圖像處理和圖像分析變得更加易于上手,讓開發(fā)人員更多的精力花在算法的設(shè)計(jì)上。
本文將主要介紹OpenCV開發(fā)的一些基礎(chǔ)知識(shí)、入門上手的方法與步驟等。
2、OpenCV詳細(xì)介紹
2.1、OpenCV的起源
OpenCV誕生于Intel研究中心,其目的是為了促進(jìn)CPU密集型應(yīng)用。為了達(dá)到這一目的,Intel啟動(dòng)了多個(gè)項(xiàng)目,
包括實(shí)時(shí)光線追蹤和三維顯示墻。一個(gè)在Intel工作的OpenCV作者在訪問一些大學(xué)時(shí),注意到許多頂尖大學(xué)中的研
究組(如MIT媒體實(shí)驗(yàn)室)擁有很好的內(nèi)部使用的開放計(jì)算機(jī)視覺庫(kù)-- (在學(xué)生們之間互相傳播的代碼),這會(huì)幫助一
個(gè)新生從高的起點(diǎn)開始他/她的計(jì)算機(jī)視覺研究。這樣一個(gè)新生可以在以前的基礎(chǔ)上繼續(xù)開始研究,而不用從底層
寫基本函數(shù)。
因此,OpenCV的目的是開發(fā)一個(gè)普遍可用的計(jì)算機(jī)視覺庫(kù)。在Intel的性能庫(kù)團(tuán)隊(duì)的幫助下 ,OpenCV實(shí)現(xiàn)
了一些核心代碼以及算法,并發(fā)給Intel俄羅斯的庫(kù)團(tuán)隊(duì)。這就是OpenCV的誕生之地:在與軟件性能庫(kù)團(tuán)隊(duì)的
合作下,它開始于Intel的研究中心,并在俄羅斯得到實(shí)現(xiàn)和優(yōu)化。
俄羅斯團(tuán)隊(duì)的主要負(fù)責(zé)人是Vadim Pisarevsky,他負(fù)責(zé)管理項(xiàng)目、寫代碼并優(yōu)化OpenCV的大部分代碼,
在OpenCV中很大一部分功勞都屬于他。跟他一起,Victor Eruhimov幫助開發(fā)了早期的架構(gòu),Valery Kuria
kin管理俄羅斯實(shí)驗(yàn)室并提供了很大的支持。在開始時(shí),OpenCV有以下三大目標(biāo):
1)為基本的視覺應(yīng)用提供開放且優(yōu)化的源代碼,以促進(jìn)視覺研究的發(fā)展。能有效地避免“閉門造車”。
2)通過提供一個(gè)通用的架構(gòu)來(lái)傳播視覺知識(shí),開發(fā)者可以在這個(gè)架構(gòu)上繼續(xù)開展工作,所以代碼
應(yīng)該是非常易讀的且可改寫。
3)本庫(kù)采用的協(xié)議不要求商業(yè)產(chǎn)品繼續(xù)開放代碼,這使得可移植的、性能被優(yōu)化的代碼可以自由獲
取,可以促進(jìn)基于視覺的商業(yè)應(yīng)用的發(fā)展。
這些目標(biāo)說(shuō)明了OpenCV的起緣。計(jì)算機(jī)視覺應(yīng)用的發(fā)展會(huì)增加對(duì)快速處理器的需求。與單獨(dú)銷售軟
件相比,促進(jìn)處理器的升級(jí)會(huì)為Intel帶來(lái)更多收入。這也許是為什么這個(gè)開放且免費(fèi)的庫(kù)出現(xiàn)在一家硬件生產(chǎn)企業(yè)中,
而不是在一家軟件公司中。從某種程度上說(shuō),在一家硬件公司里,在軟件方面會(huì)有更多創(chuàng)新的空間。
2.2、OpenCV開發(fā)語(yǔ)言
OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的
跨平臺(tái)計(jì)算機(jī)視覺庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由
一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)
視覺方面的很多通用算法。
OpenCV用C++語(yǔ)言編寫,它的主要接口也是C++語(yǔ)言,但是依然保留了大量的C語(yǔ)言接口。該庫(kù)也有大量的
Python, Java and MATLAB/OCTAVE (版本2.5)的接口。這些語(yǔ)言的API接口函數(shù)可以通過在線文檔獲得。如今
也提供對(duì)于C#,Ch, Ruby的支持。
2.3、OpenCV的應(yīng)用領(lǐng)域
OpenCV是一個(gè)用于圖像處理、分析、機(jī)器視覺方面的開源函數(shù)庫(kù)。 無(wú)論你是做科學(xué)研究,還是商業(yè)應(yīng)用,
OpenCV都可以作為你理想的工具庫(kù),因?yàn),?duì)于這兩者,它完全是免費(fèi)的。同時(shí),由于計(jì)算機(jī)視覺與機(jī)器學(xué)
習(xí)密不可分,該庫(kù)也包含了比較常用的一些機(jī)器學(xué)習(xí)算法。或許,很多人知道圖像識(shí)別、機(jī)器視覺在安防領(lǐng)域
有所應(yīng)用。但很少有人知道,在航拍圖片、街道圖片(例如google street view)中,要嚴(yán)重依賴于機(jī)器視覺的
攝像頭標(biāo)定、圖像融合等技術(shù)。
近年來(lái),在入侵檢測(cè)、特定目標(biāo)跟蹤、目標(biāo)檢測(cè)、人臉檢測(cè)、人臉識(shí)別、人臉跟蹤等領(lǐng)域,OpenCV可謂大顯
身手,而這些,僅僅是其應(yīng)用的冰山一角。如今,來(lái)自世界各地的各大公司、科研機(jī)構(gòu)的研究人員,共同維護(hù)支
持著OpenCV的開源庫(kù)開發(fā)。這些公司和機(jī)構(gòu)包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋。
計(jì)算機(jī)視覺市場(chǎng)巨大而且持續(xù)增長(zhǎng),且這方面沒有標(biāo)準(zhǔn)API,如今的計(jì)算機(jī)視覺軟件大概有以下三種:
1)研究代碼(慢,不穩(wěn)定,獨(dú)立并與其他庫(kù)不兼容)
2)耗費(fèi)很高的商業(yè)化工具(比如Halcon, MATLAB+Simulink)
3)依賴硬件的一些特別的解決方案(比如視頻監(jiān)控,制造控制系統(tǒng),醫(yī)療設(shè)備)這是如今的現(xiàn)狀。
而標(biāo)準(zhǔn)的API將簡(jiǎn)化計(jì)算機(jī)視覺程序和解決方案的開發(fā)。OpenCV致力于成為這樣的標(biāo)準(zhǔn)API。OpenCV致力于真實(shí)
世界的實(shí)時(shí)應(yīng)用,通過優(yōu)化的C代碼的編寫對(duì)其執(zhí)行速度帶來(lái)了可觀的提升,并且可以通過購(gòu)買Intel的IPP高性能
多媒體函數(shù)庫(kù)(Integrated Performance Primitives)得到更快的處理速度(注:OpenCV 2.0版的代碼已顯著優(yōu)
化,無(wú)需IPP來(lái)提升性能,故2.0版不再提供IPP接口)。下圖為OpenCV與當(dāng)前其他主流視覺函數(shù)庫(kù)的性能比較。
3、OpenCV模塊劃分
OpenCV主體分為五個(gè)模塊,其中四個(gè)模塊如下所示:
OpenCV的CV模塊包含基本的圖像處理函數(shù)和高級(jí)的計(jì)算機(jī)視覺算法。ML是機(jī)器學(xué)習(xí)庫(kù),包含一些基于統(tǒng)計(jì)
的分類和聚類工具。HighGUI包含圖像和視頻輸入/輸出的函數(shù)。CXCore包含OpenCV的一些基本數(shù)據(jù)結(jié)構(gòu)和相關(guān)函數(shù)。
目前,我們當(dāng)前討論的是OpenCV3.2.0版本。OpenCV3.0與OpenCV2.0的版本相比,他的主要改動(dòng)如下:
1)大體上保留了OpenCV 2經(jīng)典的C++和Python編程接口風(fēng)格。其中,Python接口大大增強(qiáng),也加
入了Python 3.x的支持。一般來(lái)說(shuō),以前版本的程序只要做少數(shù)修改,就可以使用OpenCV 3了。另
外還改善了Java接口,并且加入了MATLAB支持。
2)架構(gòu)調(diào)整。圖片、視頻編解碼從highgui模塊分離出來(lái),組成了imgcodecs和videoio。原先的OpenCL
模塊ocl事實(shí)上與其 它模塊融為一體,而CUDA加速模塊gpu分解成了數(shù)個(gè)以cuda開頭的模塊。此外,
除了官方支持的OpenCV代碼,還有一些自發(fā)貢獻(xiàn)的內(nèi)容、不穩(wěn)定的 內(nèi)容,或者版權(quán)尚存爭(zhēng)議的內(nèi)容,
都放到了新的倉(cāng)庫(kù)opencv_contrib中。
3)更多新算法。新版本包括了TLD、魚眼鏡頭模型等全新算法,還包括了一些更高層次可以直接拿來(lái)
用的高級(jí)封裝,比如汽車檢測(cè)等。
4)引入T-API,使OpenCL加速更容易。目前可以參考OpenCV源代碼中T-API的范例。可以發(fā)現(xiàn),開
啟和關(guān)閉OpenCL加速,只需要一個(gè)語(yǔ)句就夠了。這也就是為什么ocl模塊會(huì)消失了吧。
5)更多指令集優(yōu)化。除了之前為Intel CPU做的優(yōu)化以外,OpenCV 3還容納了ARM平臺(tái)NEON指令集的支持。
通過英特爾的幫助,OpenCV 3對(duì)x86和x64平臺(tái)默認(rèn)使用IPP。OpenCV3.0中部分函數(shù)得到加速的示意圖如下:

4、OpenCV源碼文件結(jié)構(gòu)
開源庫(kù)OpenCV的github地址為:https://github.com/opencv,下文以O(shè)penCV3.0版本展開講述。
4.1、根目錄介紹
OpenCV3.0的sources文件結(jié)構(gòu)如下:
1)3rdparty/,包含第三方的庫(kù),比如視頻解碼用的 ffmpeg,jpg、png、tiff等圖片的開源解碼庫(kù)。
2)apps/,包含進(jìn)行 haar 分類器訓(xùn)練的工具,opencv 進(jìn)行人臉檢測(cè)便是基于 haar 分類器。如果你想檢測(cè)
人臉以外的圖片,千萬(wàn)不要錯(cuò)過這幾個(gè)工具。
3)cmake/,包含生成工程項(xiàng)目時(shí) cmake 的依賴文件,用于智能搜索第三方庫(kù),普通開發(fā)者不需要關(guān)心這個(gè)文件夾的內(nèi)容。
4)data/,包含 opencv 庫(kù)以及范例中用到的資源文件,haar 物體檢測(cè)的分類器位于haarcascades子文件中。
5)doc/,包含生成文檔所需的源文件以及輔助腳本。
6)include/,包含入口頭文件。opencv 子文件夾中是 C 語(yǔ)言風(fēng)格的API,也就是《Learning OpenCV (第一版)》
中描述的API函數(shù),官方將逐漸淘汰 C 風(fēng)格函數(shù),因此我不推薦大家使用該文件夾中的頭文件。opencv2 子文件中只
有一個(gè) opencv.hpp 文件,這是 cv2 以及 cv3 推薦使用的頭文件。
7)modules/,包含核心代碼,opencv 真正的代碼都在這個(gè)文件夾中。opencv 從2.0開始以模塊的方式組織各種功
能,近兩年模塊的數(shù)量增長(zhǎng)得很快,后面我會(huì)依次介紹每個(gè)模塊的作用。
8)platforms/,包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個(gè)操作系統(tǒng)中編譯供另一個(gè)系統(tǒng)使用的文件。
9)samples/,范例文件夾。
4.2、常用模塊介紹
modules目錄中則包含了OpenCV的主要功能模塊,包含了如下的多個(gè)模塊:

1)androidcamera/,僅用于android平臺(tái),使得可以通過與其他平臺(tái)相同的接口來(lái)控制android設(shè)備的相機(jī)。
2)core/,核心功能模塊,定義了基本的數(shù)據(jù)結(jié)構(gòu),包括最重要的 Mat 類、XML 讀寫、opengl三維渲染等。
3)imgproc/,全稱為 image processing,即圖像處理。包括圖像濾波、集合圖像變換、直方圖計(jì)算、形狀描述子
等。圖像處理是計(jì)算機(jī)視覺的重要工具。
4)imgcodec/,負(fù)責(zé)各種格式的圖片的讀寫,這個(gè)模塊是從以前的 highgui 中剝離的。
5)highgui/,高級(jí)圖形界面及與 QT 框架的整合。
6)video/,視頻分析模塊。包括背景提取、光流跟蹤、卡爾曼濾波等,做視頻監(jiān)控的讀者會(huì)經(jīng)常使用這個(gè)模塊。
7)videoio/,負(fù)責(zé)視頻文件的讀寫,也包括攝像頭、Kinect 等的輸入。
8)calib3d/,相機(jī)標(biāo)定以及三維重建。相機(jī)標(biāo)定用于去除相機(jī)自身缺陷導(dǎo)致的畫面形變,還原真實(shí)的場(chǎng)景,確保計(jì)算的準(zhǔn)確性。
三維重建通常用在雙目視覺(立體視覺),即兩個(gè)標(biāo)定后的攝像頭觀察同一個(gè)場(chǎng)景,通過計(jì)算兩幅畫面中的相關(guān)性來(lái)估算像素的深度。
9)features2d/,包含 2D 特征值檢測(cè)的框架。包含各種特征值檢測(cè)器及描述子,例如 FAST、MSER、OBRB、BRISK等。
各類特征值擁有統(tǒng)一的算法接口,因此在不影響程序邏輯的情況下可以進(jìn)行替換。
10)objdetect/,物體檢測(cè)模塊。包括haar分類器、SVM檢測(cè)器及文字檢測(cè)。
11)ml/,全稱為 Machine Learning,即機(jī)器學(xué)習(xí)。包括統(tǒng)計(jì)模型、K最近鄰、支持向量機(jī)、決策樹、神經(jīng)網(wǎng)絡(luò)等經(jīng)典的機(jī)器學(xué)習(xí)算法。
12)flann/,用于在多維空間內(nèi)聚類及搜索的近似算法,做圖像檢索的讀者對(duì)它不會(huì)陌生。
13)photo/,計(jì)算攝影學(xué)。包括圖像修補(bǔ)、去噪、HDR成像、非真實(shí)感渲染等。如果讀者想實(shí)現(xiàn)Photoshop的高級(jí)功能,
那么這個(gè)模塊必不可少。
14)stitching/,圖像拼接,可用于制作全景圖。
15)nonfree/,受專利保護(hù)的算法。包含SIFT和SURF,從功能上來(lái)說(shuō)這兩個(gè)算法屬于features2d模塊的,但由于它們都
是受專利保護(hù)的,想在項(xiàng)目中可能需要專利方的許可。
16)shape/,形狀匹配算法模塊。用于描述形狀、比較形狀。
17)softcascade/,另一種物體檢測(cè)算法,Soft Cascade 分類器。包含檢測(cè)模塊和訓(xùn)練模塊。
18)superres/,全稱為 Super Resolution,用于增強(qiáng)圖像的分辨率。
19)videostab/,全稱為 Video Stabilization,用于解決相機(jī)移動(dòng)時(shí)拍攝的視頻不夠穩(wěn)定的問題。
20)viz/,三維可視化模塊?梢哉J(rèn)為這個(gè)模塊實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的三維可視化引擎,有各種UI控件和鍵盤、鼠標(biāo)交互方式。
底層實(shí)現(xiàn)基于 VTK 這個(gè)第三方庫(kù)。
4.3、CUDA加速模塊
CUDA 是顯卡制造商 NVIDIA 推出的通用計(jì)算語(yǔ)言,在cv3中有大量的模塊已經(jīng)被移植到了CUDA 語(yǔ)言:
1)cuda/,CUDA-加速的計(jì)算機(jī)視覺算法,包括數(shù)據(jù)結(jié)構(gòu) cuda::GpuMat、 基于cuda的相機(jī)標(biāo)定及三維重建等。
2)cudaarithm/,CUDA-加速的矩陣運(yùn)算模塊。
3)cudabgsegm/,CUDA-加速的背景分割模塊,通常用于視頻監(jiān)控。
4)cudacodec/,CUDA-加速的視頻編碼與解碼。
5)cudafeatures2d/,CUDA-加速的特征檢測(cè)與描述模塊,與features2d/模塊功能類似。
6)cudafilters/,CUDA-加速的圖像濾波。
7)cudaimgproc/,CUDA-加速的圖像處理算法,包含直方圖計(jì)算、霍夫變換等。
8)cudaoptflow/,CUDA-加速的光流檢測(cè)算法。
9)cudastereo/,CUDA-加速的立體視覺匹配算法。
10)cudawarping/,實(shí)現(xiàn)了 CUDA-加速的快速圖像變換,包括透視變換、旋轉(zhuǎn)、改變尺寸等。
11)cudaev/,實(shí)現(xiàn) CUDA 版本的核心功能,類似 core/ 模塊中的基礎(chǔ)算法。
5、OpenCV配置以及Visual Studio使用OpenCV
了解了OpenCV的數(shù)據(jù)結(jié)構(gòu)和功能后,下面介紹OpenCV的配置,win7 64 + vs2013 + OpenCV3.0步驟。
1)下載安裝opencv 3.0。下載地址:http://opencv.org/downloads.html。
2)配置環(huán)境變量:計(jì)算機(jī)屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量->Path->變量值:

3)配置VS2013。首先打開VS2013建立一個(gè)Win32控制臺(tái)項(xiàng)目。然后,在“項(xiàng)目->工程屬性->VC++目錄”中,加入包含目錄
..\opencv\build\include; ..\opencv\build\include\opencv;
..\opencv\build\include\opencv2。(..代表OpenCV安裝的文件夾目錄)

加入庫(kù)目錄..\opencv\build\x64\vc12\lib。“項(xiàng)目->工程屬性->鏈接器->輸入->附加依賴”中添加附加依賴項(xiàng):
opencv_ts300d.lib;opencv_world300d.lib:
配置完成后,就可以在vs2013中使用opencv3.0中的函數(shù)了。
經(jīng)過以上的基礎(chǔ)知識(shí)介紹后,就可以進(jìn)行入門的實(shí)踐了。在上面配置完成的工程中,來(lái)顯示一幅圖片,驗(yàn)證一下是否成功。
在解決方案資源管理器中,打開源文件main.cpp(沒有可以自己創(chuàng)6、建),添加以下代碼
#include<opencv2\opencv.hpp> using namespace cv; int main() { Mat src = imread("lena.jpg"); //圖片必須
添加到工程目錄下 imshow("src ", src); waitKey(); }
然后編譯代碼執(zhí)行程序,效果如下:

上圖是視頻圖像處理領(lǐng)域最經(jīng)典的Lena圖片,做視頻圖像處理的朋友肯定都知道這個(gè)漂亮的小姐姐是誰(shuí)!
6、關(guān)于Lena圖片

圖片中的女神名叫萊娜·瑟德貝里(瑞典文:Lena Soderberg),1951 年 3 月 31 日出生于瑞典,在 1972 年 11 月期的
《花花公子》雜志中,她成為了當(dāng)期的玩伴女郎(女模特),拍攝了一些照片。
在計(jì)算機(jī)圖像界,Lena圖是最受歡迎、使用最多的測(cè)試圖,在圖像處理領(lǐng)域,Lena 成為無(wú)人不知、無(wú)人不曉的女神。
很多圖像處理教程和會(huì)議論文都是用Lena圖作為測(cè)試驗(yàn)證圖,因此大多數(shù)圖像處理學(xué)習(xí)者都是從這張圖入門的,在網(wǎng)上也能搜
到各種被處理過的相關(guān)圖片:

因?yàn)檫@張圖片,Lena 成為了計(jì)算機(jī)領(lǐng)域最著名的非專業(yè)女性,也是很多 CV 程序員們口口相傳的女神。
在1973年6、7月間,美國(guó)南加州大學(xué)信號(hào)圖像處理研究所教授Alexander Sawchuk正在與一名研究生以及SIPI研究室的
經(jīng)理正在匆忙地尋找一副高質(zhì)量的圖片用于大學(xué)的會(huì)議論文。他們不喜歡1960年代早期所使用的電視標(biāo)準(zhǔn)所用的普通檢驗(yàn)圖,
他們希望找到一幅能夠得到很好動(dòng)態(tài)范圍的有光澤的圖像,并且希望能有一幅人臉圖像。正在那時(shí),碰巧有人走了進(jìn)來(lái)并且
帶著一幅最近出版的《花花公子》。雜志上的Lena照片(Lena Soderberg,萊娜·瑟德貝里,1972年在在芝加哥當(dāng)模特的瑞
典人,是《花花公子》當(dāng)年的十一月小姐)讓教授眼前一亮。教授便將這張圖掃描了下來(lái),截取圖片上半身的一部分(她的
臉部與裸露的肩部)作為了他研究使用的樣例圖像。從此,這幅512*512的經(jīng)典Lena圖片就誕生了。
萊娜的這張照片在無(wú)意間竟然一炮而紅!戴著柔軟的羽毛帽子,站在一面全身鏡前,回頭凝視著觀眾,她裸露的右肩,
眼睛在招手,嘴角掛著蒙娜麗莎式的微笑。自《蒙娜麗莎》以來(lái),沒有哪幅圖像被研究得如此深入。該圖在數(shù)字視頻處理
學(xué)習(xí)與研究中頗為知名,常被用作數(shù)字視頻處理各種實(shí)驗(yàn)(例如數(shù)據(jù)壓縮和降噪)及科學(xué)出版物的例圖。萊娜圖在圖像
壓縮算法是最廣泛應(yīng)用的標(biāo)準(zhǔn)測(cè)試圖—她的臉部與裸露的肩部已經(jīng)變成了事實(shí)上的工業(yè)標(biāo)準(zhǔn)。
從事影像數(shù)據(jù)的壓縮、運(yùn)算、傳輸、 解壓縮等處理時(shí),都經(jīng)常采用這張圖像來(lái)當(dāng)測(cè)試樣本。 這張圖片含有豐富的頻段,
包括處于低頻的光滑皮膚和處于高頻的羽毛,很適合做為測(cè)試圖片。而人眼對(duì)于人臉的細(xì)節(jié)差別感受也遠(yuǎn)比一般的景物更為明顯。
戴維·C·蒙森(David C.Munson),IEEE圖像處理匯刊(IEEE Transactions on Image Processing)的主編,
在1996年1月引用了兩個(gè)原因來(lái)說(shuō)明萊娜圖在科研領(lǐng)域流行的原因:
1)首先,該圖片包含了平整的區(qū)塊、清晰細(xì)致的紋路、漸漸變化的光影、顏色的深淺層次等細(xì)節(jié),這些都有
益于測(cè)試各種不同的圖像處理算法。它是一幅很好的測(cè)試照片!
2)其次,由于這是一個(gè)非常有魅力女人的照片。因此,多數(shù)由男性組成圖像處理研究行業(yè)傾向于使用他們認(rèn)
為很有吸引力的圖片,也并不令人驚奇。
在 1997 年的第五十屆 IS&T(圖像科學(xué)與技術(shù))大會(huì)上,Lena 被邀請(qǐng)為貴賓出席,在該會(huì)議上,她成了最受
歡迎的人物,有人甚至把她稱為 “The First Lady of Internet”(互聯(lián)網(wǎng)第一夫人)。會(huì)議上,她做了自己的簡(jiǎn)要發(fā)
言,并被無(wú)數(shù)的粉絲索取簽名及拍照。
以現(xiàn)在的標(biāo)準(zhǔn)來(lái)看,Lena圖片的分辨率比較低,隨機(jī)計(jì)算機(jī)技術(shù)的發(fā)展,后面可能不再適合作為未來(lái)圖像
理的測(cè)試圖片。也許終有一天,它會(huì)被計(jì)算機(jī)圖像學(xué)丟棄。但不可否認(rèn)的是,它曾經(jīng)在計(jì)算機(jī)圖像領(lǐng)域做出過偉大的貢獻(xiàn)。
7、OpenCV和OpenGL的區(qū)別
OpenCV和OpenGL都是用來(lái)處理圖像和視頻的,但兩者有很大的區(qū)別。
OpenCV是一個(gè)開源計(jì)算機(jī)視覺庫(kù),用于圖像和視頻處理、分析和識(shí)別。它提供了各種算法和工具,如圖像處理、
特征檢測(cè)、目標(biāo)跟蹤、人臉識(shí)別等,可以在計(jì)算機(jī)視覺應(yīng)用中使用。
OpenGL是一個(gè)開源圖形庫(kù),用于創(chuàng)建3D圖形和動(dòng)畫。它提供了各種功能和工具,如渲染、光照、紋理映射等,它
可以幫助開發(fā)人員實(shí)現(xiàn)高效的圖形渲染和動(dòng)畫效果,可以與許多編程語(yǔ)言搭配使用,如C++、Java等。它應(yīng)用于游戲、
虛擬現(xiàn)實(shí)、建筑等多個(gè)領(lǐng)域。此外,OpenGL還提供了一個(gè)專用于嵌入式領(lǐng)域的OpenGL ES (OpenGL for Embedded Systems),
是 OpenGL 三維圖形 API 的子集,主要針對(duì)手機(jī)、PAD和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。
雖然OpenCV和OpenGL都可以用于圖像處理和計(jì)算機(jī)視覺應(yīng)用,但它們的定位和應(yīng)用場(chǎng)景不同。OpenCV主要用于
圖像和視頻的處理分析,而OpenGL則主要用于3D圖形和動(dòng)畫的創(chuàng)建與渲染。
8、OpenCV與YOLO的區(qū)別
OpenCV和YOLO都是計(jì)算機(jī)視覺領(lǐng)域的工具庫(kù),但它們的作用和使用方式有所不同。
OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫(kù),提供了各種各樣的圖像處理和計(jì)算機(jī)視覺算法,如圖像讀取、圖像處理、
圖像濾波、圖像分割、邊緣檢測(cè)、特征提取、目標(biāo)檢測(cè)與跟蹤、人臉識(shí)別等。OpenCV可以用于圖像處理、視頻處理、
機(jī)器人視覺、自動(dòng)駕駛等多個(gè)領(lǐng)域。
YOLO(You Only Look Once)是一個(gè)基于深度學(xué)習(xí)的開源目標(biāo)檢測(cè)算法。相比傳統(tǒng)的目標(biāo)檢測(cè)算法,YOLO
可以實(shí)現(xiàn)更快的檢測(cè)速度,在保持較高的準(zhǔn)確率的同時(shí),可以實(shí)現(xiàn)實(shí)時(shí)檢測(cè)。YOLO采用單個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)同時(shí)預(yù)測(cè)圖
像中所有物體的類別和位置,可以處理多種尺度和多個(gè)物體。YOLO可以用于智能監(jiān)控、自動(dòng)駕駛、機(jī)器人視覺等領(lǐng)域。
因此,OpenCV和YOLO都是計(jì)算機(jī)視覺領(lǐng)域的工具,它們的應(yīng)用場(chǎng)景和目標(biāo)有所不同。OpenCV更加通用,
可以用于各種圖像處理和計(jì)算機(jī)視覺應(yīng)用,而YOLO則更加專注于目標(biāo)檢測(cè)領(lǐng)域,可以實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè),檢測(cè)效率要高一些。
9、OpenGL與DirectX的區(qū)別

說(shuō)到OpenCV和OpenGL的區(qū)別,我們也來(lái)順便說(shuō)說(shuō)OpenGL與DirectX的區(qū)別。
OpenGL和DirectX都是用于渲染3D圖形的API,但它們有較大的區(qū)別,如下:
1)平臺(tái)支持:OpenGL是跨平臺(tái)的API,可以在幾乎任何操作系統(tǒng)上運(yùn)行,而DirectX只能在Windows操作系統(tǒng)上運(yùn)行。
2)API設(shè)計(jì)理念:OpenGL的設(shè)計(jì)理念是簡(jiǎn)單易用,允許開發(fā)人員自由選擇和使用不同的實(shí)現(xiàn)。而DirectX更注
重提供完整的解決方案,包含不同的組件,如Direct3D、Direct2D、DirectCompute等。
3)軟硬件實(shí)現(xiàn):OpenGL可以使用多種實(shí)現(xiàn)方式,包括軟件實(shí)現(xiàn)和硬件加速實(shí)現(xiàn)。而DirectX只能使用硬件
加速實(shí)現(xiàn),因?yàn)樗轻槍?duì)Windows操作系統(tǒng)和硬件設(shè)計(jì)的。
4)開發(fā)語(yǔ)言:OpenGL是用C語(yǔ)言編寫的API,對(duì)于初學(xué)者和非專業(yè)開發(fā)人員來(lái)說(shuō),學(xué)習(xí)和使用OpenGL比較困難。
而DirectX是用C++編寫的API,更易于學(xué)習(xí)和使用。
5)社區(qū)支持:OpenGL有一個(gè)活躍的社區(qū),提供了大量的教程、資料和開源項(xiàng)目,使開發(fā)人員更容易入門。而DirectX
的社區(qū)相對(duì)較小,因?yàn)樗菍?a target="_blank" href="http://www.liuyangsem.com" class="UBBWordLink">Windows平臺(tái)設(shè)計(jì)的。
總的來(lái)說(shuō),OpenGL和DirectX都有各自的優(yōu)缺點(diǎn),在選擇使用哪個(gè)API時(shí),需要考慮到項(xiàng)目需求、開發(fā)成本、平臺(tái)支持等因素。
以多媒體SDL庫(kù)為例,我們經(jīng)常使用該庫(kù)在軟件中繪制視頻圖像,當(dāng)用在Windows平臺(tái)上時(shí)SDL內(nèi)部使用DirectX繪圖,當(dāng)用
在Linux平臺(tái)上時(shí)SDL內(nèi)部則使用OpenGL繪圖。
|