【OpenCV】学习笔记(一):OpenCV4.5.5文件介绍
文章目錄
- 摘要
- 一、簡介
- 1.計算機視覺
- 2.OpenCV
- 3.OpenCV文件夾
- 二、build文件夾
- 1.bin
- 2.etc
- 3.include
- 4.x64
- 5.其他
- 三、Source文件夾
- 四、總結
- 五、附錄
摘要
最近項目需要,需要做視覺相關的處理,所以學習一些關于OpenCV的知識,通過VS2019的MFC開發+OpenCV4來建立上位機對數字圖像和視頻進行處理。本篇博客主要介紹OpenCV4.5.5的文件系統各個功能,OpenCV實際是一個開源庫,所以有必要對其中所有文件的功能進簡單介紹,幫助使用者能夠更好地調用OpenCV庫。
所用工具:
1、上位機開發軟件:Visual Studio 2019
2、OpenCV版本:4.5.5
知識概括:
通過本篇文章您將學到:
1、OpenCV文件系統介紹
一、簡介
1.計算機視覺
計算機視覺(Computer Vision)是一門研究如何使機器“看”的科學,其是指用攝像機和電腦代替人眼對目標進行識別、跟蹤和測量等,并進一步做圖形處理,用電腦處理使之成為更為適合人眼觀察或傳送給儀器檢測圖像的一門學科。作為一門科學學科,計算機視覺研究相關的理論和技術,試圖建立能夠從圖像或者多維數據中獲取“信息”的人工智能系統。因為感知可以看做是從感官信號中提取信息,所以計算機視覺也可以看做是研究如何使人工智能從圖像或者多維數據中“感知”的科學。
圖像處理(Image Processing)是用計算機對圖像進行分析,以達到所需結果的技術,又稱影像處理。圖像處理技術包括圖像壓縮,增強和復原,匹配、描述和識別三個部分。圖像處理一般指數字圖像處理(Digital Image Processing)。其中,數字圖像是指用工業相機、攝像機、掃描儀等設備經過拍攝得到的一個較大的二維數組。該數組的元素稱為像素,其值稱為灰度值。而數字圖像處理是通過計算機對圖像進行去除噪聲、增強、復原、分割、提取特征等處理的方法和技術。
而OpenCV(Open Source Computer Vision Library)是一個基于開源發行的跨平臺計算機視覺庫,它實現了計算機視覺和圖像處理方面的許多通用算法,已經成為了計算機視覺領域最有力的研究工具之一。
2.OpenCV
OpenCV全稱是Open Source Computer Vision Library。OpenCV是由Intel公司發起并參與開發的一個基于BSD開源發行的跨平臺計算機視覺庫,他有一系列的接口,包括C,C++,Python,MATLAB,Java,可以運行在Windows,Linux,Mac OS,IOS和Android系統上。OpenCV實現多種實時且高效的算法,隨著不斷研發,C/C++接口函數庫應用在大規模多核開發上,大大提高了軟件算法的可應用性。OpenCV應用OpenCL接口開發技術,可以充分利用計算機硬件底層平臺進行硬件加速。OpenCV實現了圖像處理和計算機視覺方面的許多通用算法,因此在當前許多前沿領域有較多應用。
應用領域:
1、人機互動
2、物體識別
3、圖像分割
4、人臉識別
5、動作識別
6、運動跟蹤
7、機器人
8、運動分析
9、機器視覺
10、結構分析
11、汽車安全駕駛
…
OpenCV官方下載地址:https://opencv.org/releases/#
3.OpenCV文件夾
通過官網下載最新版的OpenCV4.5.5,之后安裝在電腦上,裝完之后打開文件夾,會出現如下所示的兩個子文件夾:build和source,其他文件不用管。
build文件夾里放的通常是.h.hpp.lib結尾的庫文件,這個文件夾里只有接口,沒有.cpp文件,為使用者提供,使用者知道如何調用該文件夾內的接口即可,而不需要知道他是如何實現的。source文件夾里放的是.cpp結尾的源文件,是各種各樣的函數實現。opencv的開發者(當然開源后的使用者也可以)通過sources中的源文件,構建出build中的庫文件,然后使用者就可以鏈接這些庫,include<頭文件>。一般非開源的程序和庫是不開放sources的,而opencv作為一個開源庫,這些也是使用者可見的。
二、build文件夾
build文件夾下有6個子文件夾,分別有不同的功能,在下文會依次介紹,除文件夾外還有兩個cmake文件都是cmake的一些配置。
1.bin
該文件夾是在電腦配置環境變量時用到,下一篇會講解如何配置OpenCV運行的環境,需要在電腦系統的環境變量中添加此路徑。
附:環境變量的設置方法:此電腦–空白處右擊屬性–高級系統設置–環境變量–系統變量的path–新建。
2.etc
該文件夾存放的是訓練好的分類器。haarcascades為Haar特征分類器,lbpcascades為LPB特征分類器,目錄下的haarcascade_frontalface_alt.xml與haarcascade_frontalface_alt2.xml都是用來檢測人臉的Haar分類器。這個haarcascades目錄下還有人的全身,眼睛,嘴唇的Haar分類器。兩個文件夾下都是XML文件。
3.include
該文件夾下有一個子文件夾opencv2(在之前的版本中有兩個文件夾:opencv和opencv2),該文件夾在VS2019配置包含目錄時使用,需要添加include和子文件夾opencv2的路徑。該文件夾內的函數也是OpenCV的主要調用接口,下面對所有文件夾的功能和用途進行簡單介紹。
(1)【calib3d】是由calibration(校準)和3D這兩個單詞的縮寫組合而成,模塊主要是相機校準和三維重建相關內容,包含相機標定與立體視覺等功能,例如物體位姿估計、三維重建、攝像頭標定等。
(2)【core】核心功能模塊,模塊主要包含 OpenCV 庫的基礎結構以及基本操作,例如OpenCV基本數據結構、繪圖函數、數組操作相關函數、動態數據結構、與OpenGL的互操作等。
(3)【dnn】深度學習模塊,這個模塊是OpenCV 4版本的一個特色,其主要包括構建神經網絡、加載序列化網絡模型等。但是該模塊目前僅適用于正向傳遞計算(測試網絡),原則上不支持反向計算(訓練網絡)。
(4)【features2d】是由features(特征)和2D這兩個單詞的縮寫組合而成,即2D功能框架,提供特征檢測和描述、特征檢測器通用接口、描述符提取器通用接口等,其功能主要為處理圖像特征點,例如特征檢測、描述與匹配等。
(5)【flann】這個模塊名稱是Fast Library for Approximate Nearest Neighbors(快速近似最近鄰庫)的縮寫,這個模塊是高維的近似近鄰快速搜索算法庫,主要包含快速近似最近鄰搜索與聚類等。
(6)【gapi】這個模塊是OpenCV 4.0中新增加的模塊,旨在加速常規的圖像處理,與其他模塊相比,這個模塊主要充當框架而不是某些特定的計算機視覺算法。
(7)【highgui】高層GUI圖形用戶界面,包含創建和操作顯示圖像的窗口、處理鼠標事件以及鍵盤命令、提供圖形交互可視化界面等。
(8)【imgcodecs】圖像文件讀取與保存模塊,主要用于圖像文件讀取與保存。
(9)【imgproc】圖像處理模塊,該模塊是由image(圖像)和process(處理)兩個單詞的縮寫組和而成,是重要的圖像處理模塊,其主要包括圖像濾波、幾何變換、直方圖、特征檢測與目標檢測等。
(10)【ml】機器學習模塊,基本上都是統計模型和分類算法,主要為統計分類、回歸和數據聚類、支持向量機、隨機數、神經網絡等。
(11)【objdect】目標檢測模塊,主要用于圖像目標檢測,例如檢測Haar特征。
(12)【photo】計算攝影模塊,主要包含圖像修復和去噪等。
(13)【stitching】圖像拼接模塊,主要包含特征點尋找與匹配圖像、估計旋轉、自動校準、接縫估計等圖像拼接過程的相關內容。
(14)【video】視頻分析模塊,主要包含運動估計、背景分離、對象跟蹤等視頻處理相關內容。
(15)【videoio】視頻輸入輸出模塊,主要用于讀取與寫入視頻或者圖像序列。
4.x64
因為在64位系統下使用,所以需要用到這個文件夾,老版本的OpenCV還有個x86文件夾,這是供給32位系統使用的,現在已刪除。x64文件夾下有兩個子文件夾:vc14和vc15。對應不同的VS版本,詳見以下備注。
下面以vc15為例,vc15文件夾下有兩個子文件夾:bin和lib。
bin文件夾下存放的是.dll文件,用來設置環境變量。該文件夾下的三個.dll文件需要在環境變量中添加到系統C:\Windows\System中。具體操作步驟見下篇博客。
lib文件夾下存放的是.lib文件,用來鏈接。在VS2019配置庫目錄時需要包含此路徑,在配置鏈接器中需要將文件夾下455d.lib添加到附加依賴項。
附:
(1).lib和.dll文件的區別
lib是編譯時用到的,dll是運行時用到的。如果要完成源代碼的編譯,只需要lib;如果要使動態鏈接的程序運行起來,只需要dll。如果有dll文件,那么lib一般是一些索引信息,記錄了dll中函數的入口和位置,dll中是函數的具體內容;如果只有lib文件,那么這個lib文件是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib文件,在運行程序時不需要再掛動態庫,缺點是導致應用程序比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程序才行。
(2)動態鏈接和靜態鏈接
動態鏈接使用動態鏈接庫,允許可執行模塊(.dll文件或.exe文件)僅包含在運行時定位DLL函數的可執行代碼所需的信息。
靜態鏈接使用靜態鏈接庫,鏈接器從靜態鏈接庫LIB獲取所有被引用函數,并將庫同代碼一起放到可執行文件中。
(3)VS和OpenCV的版本對應
opencv2.4.13-----vc11;vc12
opencv2.4.12-----vc11;vc12
opencv2.4.11-----vc10;vc11;vc12
opencv3.3 —vc14
opencv3.4 —vc14;vc15
opencv4.2 —vc15;vc16
其中:
vc8 = Visual Studio 2005
vc9 = Visual Studio 2008
c10 = Visual Studio 2010
vc11 = Visual Studio 2012
vc12 = Visual Studio 2013
vc14 = Visual Studio 2015
vc15 = Visual Studio 2017
vc16 = Visual Studio 2019
5.其他
build文件夾下還有java和python文件夾,由于本博客使用C/C++開發,因此暫時不考慮這些。
三、Source文件夾
該文件夾存放一些.cpp源文件,因為我們只用OpenCV,所以一般用到build中的接口即可,以后這些文件等用到的時候再做分析。其下九個子文件夾的功能簡介如下做出解釋。
(1)【3rdparty】:第三方庫,如ffmpeg視頻編碼等。
(2)【apps】:一些應用,比如級聯分類器,haar特征分類器。
(3)【cmake】:編譯相關。
(4)【data】:級聯分類器的一些數據。比如人臉檢測、人眼檢測等。
(5)【doc】:是一些文檔,包含一些教程。
(6)【include】:是所有的頭文件。
(7)【modules】:包含了所有的源文件。
(8)【platform】:平臺相關,iOS、Android、Linux、script、win。
(9)【samples】:是一些簡短的學習用例。
四、總結
經過本篇博客,讀者對OpenCV的文件系統應該有了大致了解,下面就該將這些文件應用于具體的工程,本篇博客只介紹文件,下面一步一步將OpenCV應用于VS的MFC中,達到圖像處理的目的。
五、附錄
OpenCV文件包含關系:
PS:碼字不易,求各位大佬看完點個贊,感謝!!!
總結
以上是生活随笔為你收集整理的【OpenCV】学习笔记(一):OpenCV4.5.5文件介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GBase数据库日常运维操作(一)
- 下一篇: RFID会议签到系统总结(二十一)――服