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

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

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

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

加入庫目錄..\opencv\build\x64\vc12\lib。“項目->工程屬性->鏈接器->輸入->附加依賴”中添加附加依賴項:
opencv_ts300d.lib;opencv_world300d.lib:
配置完成后,就可以在vs2013中使用opencv3.0中的函數(shù)了。
經(jīng)過以上的基礎(chǔ)知識介紹后,就可以進行入門的實踐了。在上面配置完成的工程中,來顯示一幅圖片,驗證一下是否成功。
在解決方案資源管理器中,打開源文件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圖片,做視頻圖像處理的朋友肯定都知道這個漂亮的小姐姐是誰!
6、關(guān)于Lena圖片

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

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

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