目錄
1、概述
2、OpenCV詳細(xì)介紹
2.1、OpenCV的起源
2.2、OpenCV開發(fā)語言
2.3、OpenCV的應(yīng)用領(lǐng)域
3、OpenCV模塊劃分
4、OpenCV源碼文件結(jié)構(gòu)
4.1、根目錄介紹
4.2、常用模塊介紹
4.3、CUDA加速模塊
5、OpenCV配置以及Visual Studio使用OpenCV
6、關(guān)于Lena圖片
7、OpenCV和OpenGL的區(qū)別
8、OpenCV與YOLO的區(qū)別
9、OpenGL與DirectX的區(qū)別
VC++常用功能開發(fā)匯總(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++軟件異常排查從入門到精通系列教程(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/125529931C++軟件分析工具案例集錦(專欄文章正在更新中...)https://blog.csdn.net/chenlycly/category_12279968.html
C/C++基礎(chǔ)與進(jìn)階https://blog.csdn.net/chenlycly/category_11931267.html
1、概述
? ? ? ?在計(jì)算機(jī)視覺項(xiàng)目的開發(fā)中,OpenCV作為最大眾的開源庫,擁有了豐富的常用圖像處理函數(shù)庫,采用C/C++語言編寫,可以運(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í)、入門上手的方法與步驟等。
?在這里,給大家重點(diǎn)推薦一下我的兩個(gè)熱門暢銷專欄:
專欄1:(該專欄訂閱量接近350個(gè),有很強(qiáng)的實(shí)戰(zhàn)參考價(jià)值,廣受好評!)
C++軟件異常排查從入門到精通系列教程(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/125529931
本專欄根據(jù)近幾年C++軟件異常排查的項(xiàng)目實(shí)踐,系統(tǒng)地總結(jié)了引發(fā)C++軟件異常的常見原因以及排查C++軟件異常的常用思路與方法,詳細(xì)講述了C++軟件的調(diào)試方法與手段,以圖文并茂的方式給出具體的實(shí)戰(zhàn)問題分析實(shí)例,帶領(lǐng)大家逐步掌握C++軟件調(diào)試與異常排查的相關(guān)技術(shù),適合基礎(chǔ)進(jìn)階和想做技術(shù)提升的相關(guān)C++開發(fā)人員!
專欄中的文章都是通過項(xiàng)目實(shí)戰(zhàn)總結(jié)出來的,有很強(qiáng)的實(shí)戰(zhàn)參考價(jià)值!專欄文章還在持續(xù)更新中,預(yù)計(jì)文章篇數(shù)能更新到200篇以上!
專欄2:?
C/C++基礎(chǔ)與進(jìn)階(專欄文章,持續(xù)更新中...)https://blog.csdn.net/chenlycly/category_11931267.html
以多年的開發(fā)實(shí)戰(zhàn)為基礎(chǔ),總結(jié)并講解一些的C/C++基礎(chǔ)與進(jìn)階內(nèi)容,以圖文并茂的方式對相關(guān)知識(shí)點(diǎn)進(jìn)行詳細(xì)地展開與闡述!專欄涉及了C/C++領(lǐng)域的多個(gè)方面的內(nèi)容,同時(shí)給出C/C++及網(wǎng)絡(luò)方面的常見筆試面試題,并詳細(xì)講述Visual Studio常用調(diào)試手段與技巧!
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ī)視覺庫-- (在學(xué)生們之間互相傳播的代碼),這會(huì)幫助一個(gè)新生從高的起點(diǎn)開始他/她的計(jì)算機(jī)視覺研究。這樣一個(gè)新生可以在以前的基礎(chǔ)上繼續(xù)開始研究,而不用從底層寫基本函數(shù)。
? ? ? ?因此,OpenCV的目的是開發(fā)一個(gè)普遍可用的計(jì)算機(jī)視覺庫。在Intel的性能庫團(tuán)隊(duì)的幫助下 ,OpenCV實(shí)現(xiàn)了一些核心代碼以及算法,并發(fā)給Intel俄羅斯的庫團(tuán)隊(duì)。這就是OpenCV的誕生之地:在與軟件性能庫團(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 Kuriakin管理俄羅斯實(shí)驗(yàn)室并提供了很大的支持。在開始時(shí),OpenCV有以下三大目標(biāo):
1)為基本的視覺應(yīng)用提供開放且優(yōu)化的源代碼,以促進(jìn)視覺研究的發(fā)展。能有效地避免“閉門造車”。
2)通過提供一個(gè)通用的架構(gòu)來傳播視覺知識(shí),開發(fā)者可以在這個(gè)架構(gòu)上繼續(xù)開展工作,所以代碼應(yīng)該是非常易讀的且可改寫。
3)本庫采用的協(xié)議不要求商業(yè)產(chǎn)品繼續(xù)開放代碼,這使得可移植的、性能被優(yōu)化的代碼可以自由獲取,可以促進(jìn)基于視覺的商業(yè)應(yīng)用的發(fā)展。
? ? ? ?這些目標(biāo)說明了OpenCV的起緣。計(jì)算機(jī)視覺應(yīng)用的發(fā)展會(huì)增加對快速處理器的需求。與單獨(dú)銷售軟件相比,促進(jìn)處理器的升級(jí)會(huì)為Intel帶來更多收入。這也許是為什么這個(gè)開放且免費(fèi)的庫出現(xiàn)在一家硬件生產(chǎn)企業(yè)中,而不是在一家軟件公司中。從某種程度上說,在一家硬件公司里,在軟件方面會(huì)有更多創(chuàng)新的空間。?
2.2、OpenCV開發(fā)語言
? ? ? ?OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列C函數(shù)和少量C++類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。
? ? ? ?OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。這些語言的API接口函數(shù)可以通過在線文檔獲得。如今也提供對于C#,Ch, Ruby的支持。
2.3、OpenCV的應(yīng)用領(lǐng)域
? ? ? ?OpenCV是一個(gè)用于圖像處理、分析、機(jī)器視覺方面的開源函數(shù)庫。?無論你是做科學(xué)研究,還是商業(yè)應(yīng)用,OpenCV都可以作為你理想的工具庫,因?yàn)椋瑢τ谶@兩者,它完全是免費(fèi)的。同時(shí),由于計(jì)算機(jī)視覺與機(jī)器學(xué)習(xí)密不可分,該庫也包含了比較常用的一些機(jī)器學(xué)習(xí)算法?;蛟S,很多人知道圖像識(shí)別、機(jī)器視覺在安防領(lǐng)域有所應(yīng)用。但很少有人知道,在航拍圖片、街道圖片(例如google street view)中,要嚴(yán)重依賴于機(jī)器視覺的攝像頭標(biāo)定、圖像融合等技術(shù)。
? ? ? ?近年來,在入侵檢測、特定目標(biāo)跟蹤、目標(biāo)檢測、人臉檢測、人臉識(shí)別、人臉跟蹤等領(lǐng)域,OpenCV可謂大顯身手,而這些,僅僅是其應(yīng)用的冰山一角。如今,來自世界各地的各大公司、科研機(jī)構(gòu)的研究人員,共同維護(hù)支持著OpenCV的開源庫開發(fā)。這些公司和機(jī)構(gòu)包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋。
? ? ? ?計(jì)算機(jī)視覺市場巨大而且持續(xù)增長,且這方面沒有標(biāo)準(zhǔn)API,如今的計(jì)算機(jī)視覺軟件大概有以下三種:
1)研究代碼(慢,不穩(wěn)定,獨(dú)立并與其他庫不兼容)
2)耗費(fèi)很高的商業(yè)化工具(比如Halcon,?MATLAB+Simulink)
3)依賴硬件的一些特別的解決方案(比如視頻監(jiān)控,制造控制系統(tǒng),醫(yī)療設(shè)備)這是如今的現(xiàn)狀。
而標(biāo)準(zhǔn)的API將簡化計(jì)算機(jī)視覺程序和解決方案的開發(fā)。OpenCV致力于成為這樣的標(biāo)準(zhǔn)API。OpenCV致力于真實(shí)世界的實(shí)時(shí)應(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主體分為五個(gè)模塊,其中四個(gè)模塊如下所示:
OpenCV的CV模塊包含基本的圖像處理函數(shù)和高級(jí)的計(jì)算機(jī)視覺算法。ML是機(jī)器學(xué)習(xí)庫,包含一些基于統(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的支持。一般來說,以前版本的程序只要做少數(shù)修改,就可以使用OpenCV 3了。另外還改善了Java接口,并且加入了MATLAB支持。
2)架構(gòu)調(diào)整。圖片、視頻編解碼從highgui模塊分離出來,組成了imgcodecs和videoio。原先的OpenCL模塊ocl事實(shí)上與其 它模塊融為一體,而CUDA加速模塊gpu分解成了數(shù)個(gè)以cuda開頭的模塊。此外,除了官方支持的OpenCV代碼,還有一些自發(fā)貢獻(xiàn)的內(nèi)容、不穩(wěn)定的 內(nèi)容,或者版權(quán)尚存爭議的內(nèi)容,都放到了新的倉庫opencv_contrib中。
3)更多新算法。新版本包括了TLD、魚眼鏡頭模型等全新算法,還包括了一些更高層次可以直接拿來用的高級(jí)封裝,比如汽車檢測等。
4)引入T-API,使OpenCL加速更容易。目前可以參考OpenCV源代碼中T-API的范例??梢园l(fā)現(xiàn),開啟和關(guān)閉OpenCL加速,只需要一個(gè)語句就夠了。這也就是為什么ocl模塊會(huì)消失了吧。
5)更多指令集優(yōu)化。除了之前為Intel CPU做的優(yōu)化以外,OpenCV 3還容納了ARM平臺(tái)NEON指令集的支持。通過英特爾的幫助,OpenCV 3對x86和x64平臺(tái)默認(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/,包含進(jìn)行 haar 分類器訓(xùn)練的工具,opencv 進(jìn)行人臉檢測便是基于 haar 分類器。如果你想檢測人臉以外的圖片,千萬不要錯(cuò)過這幾個(gè)工具。
3)cmake/,包含生成工程項(xiàng)目時(shí) cmake 的依賴文件,用于智能搜索第三方庫,普通開發(fā)者不需要關(guān)心這個(gè)文件夾的內(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 子文件中只有一個(gè) opencv.hpp 文件,這是 cv2 以及 cv3 推薦使用的頭文件。
7)modules/,包含核心代碼,opencv 真正的代碼都在這個(gè)文件夾中。opencv 從2.0開始以模塊的方式組織各種功能,近兩年模塊的數(shù)量增長得很快,后面我會(huì)依次介紹每個(gè)模塊的作用。
8)platforms/,包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個(gè)操作系統(tǒng)中編譯供另一個(gè)系統(tǒng)使用的文件。
9)samples/,范例文件夾。
4.2、常用模塊介紹
? ? ? ? modules目錄中則包含了OpenCV的主要功能模塊,包含了如下的多個(gè)模塊:
1)androidcamera/,僅用于android平臺(tái),使得可以通過與其他平臺(tá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í)的場景,確保計(jì)算的準(zhǔn)確性。三維重建通常用在雙目視覺(立體視覺),即兩個(gè)標(biāo)定后的攝像頭觀察同一個(gè)場景,通過計(jì)算兩幅畫面中的相關(guān)性來估算像素的深度。
9)features2d/,包含 2D 特征值檢測的框架。包含各種特征值檢測器及描述子,例如 FAST、MSER、OBRB、BRISK等。各類特征值擁有統(tǒng)一的算法接口,因此在不影響程序邏輯的情況下可以進(jìn)行替換。
10)objdetect/,物體檢測模塊。包括haar分類器、SVM檢測器及文字檢測。
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)聚類及搜索的近似算法,做圖像檢索的讀者對它不會(huì)陌生。
13)photo/,計(jì)算攝影學(xué)。包括圖像修補(bǔ)、去噪、HDR成像、非真實(shí)感渲染等。如果讀者想實(shí)現(xiàn)Photoshop的高級(jí)功能,那么這個(gè)模塊必不可少。
14)stitching/,圖像拼接,可用于制作全景圖。
15)nonfree/,受專利保護(hù)的算法。包含SIFT和SURF,從功能上來說這兩個(gè)算法屬于features2d模塊的,但由于它們都是受專利保護(hù)的,想在項(xiàng)目中可能需要專利方的許可。
16)shape/,形狀匹配算法模塊。用于描述形狀、比較形狀。
17)softcascade/,另一種物體檢測算法,Soft Cascade 分類器。包含檢測模塊和訓(xùn)練模塊。
18)superres/,全稱為 Super Resolution,用于增強(qiáng)圖像的分辨率。
19)videostab/,全稱為 Video Stabilization,用于解決相機(jī)移動(dòng)時(shí)拍攝的視頻不夠穩(wěn)定的問題。
20)viz/,三維可視化模塊。可以認(rèn)為這個(gè)模塊實(shí)現(xiàn)了一個(gè)簡單的三維可視化引擎,有各種UI控件和鍵盤、鼠標(biāo)交互方式。底層實(shí)現(xiàn)基于 VTK 這個(gè)第三方庫。
4.3、CUDA加速模塊
? ? ? ? CUDA 是顯卡制造商 NVIDIA 推出的通用計(jì)算語言,在cv3中有大量的模塊已經(jīng)被移植到了CUDA 語言:
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-加速的特征檢測與描述模塊,與features2d/模塊功能類似。
6)cudafilters/,CUDA-加速的圖像濾波。
7)cudaimgproc/,CUDA-加速的圖像處理算法,包含直方圖計(jì)算、霍夫變換等。
8)cudaoptflow/,CUDA-加速的光流檢測算法。
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安裝的文件夾目錄)
?
加入庫目錄..\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í)踐了。在上面配置完成的工程中,來顯示一幅圖片,驗(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è)漂亮的小姐姐是誰!
6、關(guān)于Lena圖片
? ? ? ?圖片中的女神名叫萊娜·瑟德貝里(瑞典文:Lena Soderberg),1951 年 3 月 31 日出生于瑞典,在 1972 年 11 月期的《花花公子》雜志中,她成為了當(dāng)期的玩伴女郎(女模特),拍攝了一些照片。?
? ? ? ?在計(jì)算機(jī)圖像界,Lena圖是最受歡迎、使用最多的測試圖,在圖像處理領(lǐng)域,Lena 成為無人不知、無人不曉的女神。很多圖像處理教程和會(huì)議論文都是用Lena圖作為測試驗(yàn)證圖,因此大多數(shù)圖像處理學(xué)習(xí)者都是從這張圖入門的,在網(wǎng)上也能搜到各種被處理過的相關(guān)圖片:
因?yàn)檫@張圖片,Lena 成為了計(jì)算機(jī)領(lǐng)域最著名的非專業(yè)女性,也是很多 CV 程序員們口口相傳的女神。
? ? ? ?在1973年6、7月間,美國南加州大學(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)來并且?guī)е环罱霭娴摹痘ɑü印?。雜志上的Lena照片(Lena Soderberg,萊娜·瑟德貝里,1972年在在芝加哥當(dāng)模特的瑞典人,是《花花公子》當(dāng)年的十一月小姐)讓教授眼前一亮。教授便將這張圖掃描了下來,截取圖片上半身的一部分(她的臉部與裸露的肩部)作為了他研究使用的樣例圖像。從此,這幅512*512的經(jīng)典Lena圖片就誕生了。
? ? ? ?萊娜的這張照片在無意間竟然一炮而紅!戴著柔軟的羽毛帽子,站在一面全身鏡前,回頭凝視著觀眾,她裸露的右肩,眼睛在招手,嘴角掛著蒙娜麗莎式的微笑。自《蒙娜麗莎》以來,沒有哪幅圖像被研究得如此深入。該圖在數(shù)字視頻處理學(xué)習(xí)與研究中頗為知名,常被用作數(shù)字視頻處理各種實(shí)驗(yàn)(例如數(shù)據(jù)壓縮和降噪)及科學(xué)出版物的例圖。萊娜圖在圖像壓縮算法是最廣泛應(yīng)用的標(biāo)準(zhǔn)測試圖—她的臉部與裸露的肩部已經(jīng)變成了事實(shí)上的工業(yè)標(biāo)準(zhǔn)。?
? ? ? ?從事影像數(shù)據(jù)的壓縮、運(yùn)算、傳輸、 解壓縮等處理時(shí),都經(jīng)常采用這張圖像來當(dāng)測試樣本。?這張圖片含有豐富的頻段,包括處于低頻的光滑皮膚和處于高頻的羽毛,很適合做為測試圖片。而人眼對于人臉的細(xì)節(jié)差別感受也遠(yuǎn)比一般的景物更為明顯。
? ? ? ?戴維·C·蒙森(David C.Munson),IEEE圖像處理匯刊(IEEE Transactions on Image Processing)的主編, 在1996年1月引用了兩個(gè)原因來說明萊娜圖在科研領(lǐng)域流行的原因:
1)首先,該圖片包含了平整的區(qū)塊、清晰細(xì)致的紋路、漸漸變化的光影、顏色的深淺層次等細(xì)節(jié),這些都有益于測試各種不同的圖像處理算法。它是一幅很好的測試照片!
2)其次,由于這是一個(gè)非常有魅力女人的照片。因此,多數(shù)由男性組成圖像處理研究行業(yè)傾向于使用他們認(rèn)為很有吸引力的圖片,也并不令人驚奇。
? ? ? ?在 1997 年的第五十屆 IS&T(圖像科學(xué)與技術(shù))大會(huì)上,Lena 被邀請為貴賓出席,在該會(huì)議上,她成了最受歡迎的人物,有人甚至把她稱為 “The First Lady of Internet”(互聯(lián)網(wǎng)第一夫人)。會(huì)議上,她做了自己的簡要發(fā)言,并被無數(shù)的粉絲索取簽名及拍照。
? ? ? ?以現(xiàn)在的標(biāo)準(zhǔn)來看,Lena圖片的分辨率比較低,隨機(jī)計(jì)算機(jī)技術(shù)的發(fā)展,后面可能不再適合作為未來圖像處理的測試圖片。也許終有一天,它會(huì)被計(jì)算機(jī)圖像學(xué)丟棄。但不可否認(rèn)的是,它曾經(jīng)在計(jì)算機(jī)圖像領(lǐng)域做出過偉大的貢獻(xiàn)。
7、OpenCV和OpenGL的區(qū)別
? ? ? ?OpenCV和OpenGL都是用來處理圖像和視頻的,但兩者有很大的區(qū)別。?
? ? ? ?OpenCV是一個(gè)開源計(jì)算機(jī)視覺庫,用于圖像和視頻處理、分析和識(shí)別。它提供了各種算法和工具,如圖像處理、特征檢測、目標(biāo)跟蹤、人臉識(shí)別等,可以在計(jì)算機(jī)視覺應(yīng)用中使用。
? ? ? ?OpenGL是一個(gè)開源圖形庫,用于創(chuàng)建3D圖形和動(dòng)畫。它提供了各種功能和工具,如渲染、光照、紋理映射等,它可以幫助開發(fā)人員實(shí)現(xiàn)高效的圖形渲染和動(dòng)畫效果,可以與許多編程語言搭配使用,如C++、Java等。它應(yīng)用于游戲、虛擬現(xiàn)實(shí)、建筑等多個(gè)領(lǐng)域。此外,OpenGL還提供了一個(gè)專用于嵌入式領(lǐng)域的OpenGL ES (OpenGL for Embedded Systems), 是 OpenGL 三維圖形 API 的子集,主要針對手機(jī)、PAD和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。
? ? ? ?雖然OpenCV和OpenGL都可以用于圖像處理和計(jì)算機(jī)視覺應(yīng)用,但它們的定位和應(yīng)用場景不同。OpenCV主要用于圖像和視頻的處理分析,而OpenGL則主要用于3D圖形和動(dòng)畫的創(chuàng)建與渲染。
8、OpenCV與YOLO的區(qū)別
? ? ? ?OpenCV和YOLO都是計(jì)算機(jī)視覺領(lǐng)域的工具庫,但它們的作用和使用方式有所不同。
? ? ? ?OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫,提供了各種各樣的圖像處理和計(jì)算機(jī)視覺算法,如圖像讀取、圖像處理、圖像濾波、圖像分割、邊緣檢測、特征提取、目標(biāo)檢測與跟蹤、人臉識(shí)別等。OpenCV可以用于圖像處理、視頻處理、機(jī)器人視覺、自動(dòng)駕駛等多個(gè)領(lǐng)域。
? ? ? ?YOLO(You Only Look Once)是一個(gè)基于深度學(xué)習(xí)的開源目標(biāo)檢測算法。相比傳統(tǒng)的目標(biāo)檢測算法,YOLO可以實(shí)現(xiàn)更快的檢測速度,在保持較高的準(zhǔn)確率的同時(shí),可以實(shí)現(xiàn)實(shí)時(shí)檢測。YOLO采用單個(gè)神經(jīng)網(wǎng)絡(luò)來同時(shí)預(yù)測圖像中所有物體的類別和位置,可以處理多種尺度和多個(gè)物體。YOLO可以用于智能監(jiān)控、自動(dòng)駕駛、機(jī)器人視覺等領(lǐng)域。
? ? ? ?因此,OpenCV和YOLO都是計(jì)算機(jī)視覺領(lǐng)域的工具,它們的應(yīng)用場景和目標(biāo)有所不同。OpenCV更加通用,可以用于各種圖像處理和計(jì)算機(jī)視覺應(yīng)用,而YOLO則更加專注于目標(biāo)檢測領(lǐng)域,可以實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測,檢測效率要高一些。
9、OpenGL與DirectX的區(qū)別
? ? ? ? 說到OpenCV和OpenGL的區(qū)別,我們也來順便說說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ì)理念是簡單易用,允許開發(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)樗轻槍indows操作系統(tǒng)和硬件設(shè)計(jì)的。
4)開發(fā)語言:OpenGL是用C語言編寫的API,對于初學(xué)者和非專業(yè)開發(fā)人員來說,學(xué)習(xí)和使用OpenGL比較困難。而DirectX是用C++編寫的API,更易于學(xué)習(xí)和使用。
5)社區(qū)支持:OpenGL有一個(gè)活躍的社區(qū),提供了大量的教程、資料和開源項(xiàng)目,使開發(fā)人員更容易入門。而DirectX的社區(qū)相對較小,因?yàn)樗菍閃indows平臺(tái)設(shè)計(jì)的。文章來源:http://www.zghlxwxcb.cn/news/detail-497055.html
? ? ? ?總的來說,OpenGL和DirectX都有各自的優(yōu)缺點(diǎn),在選擇使用哪個(gè)API時(shí),需要考慮到項(xiàng)目需求、開發(fā)成本、平臺(tái)支持等因素。以多媒體SDL庫為例,我們經(jīng)常使用該庫在軟件中繪制視頻圖像,當(dāng)用在Windows平臺(tái)上時(shí)SDL內(nèi)部使用DirectX繪圖,當(dāng)用在Linux平臺(tái)上時(shí)SDL內(nèi)部則使用OpenGL繪圖。文章來源地址http://www.zghlxwxcb.cn/news/detail-497055.html
到了這里,關(guān)于開源計(jì)算機(jī)視覺庫OpenCV詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!