官术网_书友最值得收藏!

1.1 知識引入

1.1.1 OpenCV簡介

OpenCV是一種開源的計算機視覺庫(Computer Vision Library,CVL),一直被廣泛使用。OpenCV底層由C/C++語言實現,其上層提供了Python、Java、JavaScript、Ruby、MATLAB等語言的接口,可以實現多平臺無縫兼容。OpenCV擁有超過2500種優化算法,包括一套全面的、經典的和先進的計算機視覺(Computer Vision,CV)和機器學習(Machine Learning,ML)算法,這些算法涉及圖像識別和目標檢測(object detection)等方面。目前,主要由來自微軟、IBM、西門子、谷歌、英特爾、斯坦福大學、麻省理工學院、卡耐基-梅隆大學、劍橋大學等公司或大學的研究人員共同維護和支持OpenCV的開源庫開發。

OpenCV包含穩定的主倉庫,以及具有實驗性質的或需為專利付費的opencv_contrib倉庫。OpenCV模塊中的硬件加速層提供了針對不同CPU和GPU的優化加速,以及不同的軟件/硬件加速庫。OpenCV不僅為不同的操作系統提供了視頻I/O、文件I/O和用戶界面(User Interface,UI),還提供了詳細的用戶指導手冊以及大量的單元測試和例程。

1.1.2 OpenCV的主要模塊

OpenCV提供了許多強大的圖像和視頻處理功能。其主要模塊如下。

core模塊。該模塊為核心模塊,包含基礎數據結構、動態數據結構、算法(線性代數、快速傅里葉變換等相關算法)、繪圖函數、XML/YAML文件I/O、系統函數和宏等。

imgcodecs模塊。該模塊為圖像編解碼模塊,用于讀取、寫入圖像并對各種格式的圖像進行編解碼處理,包括JPEG、PNG、BMP等格式的圖像。

imgproc模塊。該模塊為圖像處理模塊,主要用于進行濾波操作、形態學處理、幾何變換、色彩空間轉換、直方圖計算、結構形狀分析、運動分析、特征檢測、目標檢測等。

highgui模塊。該模塊為高級用戶交互模塊,包含圖形用戶界面(Graphics User Interface,GUI)、圖像和視頻I/O,提供了窗口操作功能,如創建顯示圖像或者視頻的窗口、通過命令窗口響應鍵盤和鼠標事件、操作窗口中圖像的某個區域等。

features2d模塊。該模塊為二維特征檢測與描述模塊,主要用于圖像特征檢測、描述、匹配等。利用該模塊可以從二維圖像中檢測和提取對象的特征。

calib3d模塊。該模塊為三維重建模塊,提供了三維重建功能,可根據二維圖像創建三維場景。它主要用于完成相機標定、立體視覺模擬、姿態估計和三維物體重建等任務。

video模塊。該模塊為視頻模塊,提供了光流法、運動模板、背景分離、目標跟蹤等視頻處理技術,以及視頻分析(video analysis)功能,如分析視頻中連續幀的運動、跟蹤視頻中的目標。該模塊還提供了視頻穩定處理功能,可解決拍攝視頻時的抖動問題等。

gapi模塊。該模塊為圖形加速模塊,可對圖像算法做加速處理,主要用于圖像和視頻數據的高性能處理和計算,提供簡化編程模型和優化圖像處理的算法。

objdetect模塊。該模塊為目標檢測模塊,不僅提供了目標檢測功能,還提供了常見的目標檢測算法和預訓練的目標檢測模型。

ml模塊。該模塊為機器學習模塊,提供了機器學習功能,包含常見的統計模型和分類算法等機器學習算法,如k近鄰(k-Nearest Neighbors,kNN)、k均值聚類(k-Means Clustering)、支持向量機(Support Vector Machine,SVM)、神經網絡(neural network)等。

dnn模塊。該模塊為深度神經網絡(Deep Neural Network,DNN)模塊,提供了深度學習功能,支持Caffe、TensorFlow、PyTorch、DarkNet等主流的深度學習框架,用于加載和運行深度學習模型,從而可以進行圖像分類(image classification)、目標檢測、語義分割(semantic segmentation)等操作。

ts模塊。該模塊為測試模塊,主要包含OpenCV的單元測試和功能測試框架,用于驗證OpenCV相關庫的正確性和穩定性。

OpenCV還提供了許多其他模塊,可以用于圖像拼接、圖像分割(image segmentation)、目標識別等。用戶可以根據自己的需求組合使用這些模塊,以完成特定的計算機視覺任務。

1.1.3 OpenCV的版本

1999年,加里·布拉德斯基(Gary Bradski)在英特爾公司創建了計算機視覺庫項目。該項目旨在提供通用的計算機視覺接口,并以開源的方式發布。

本節介紹OpenCV的版本演進。

1.OpenCV 1.x

OpenCV 1.x是最早的版本,這個版本提供了許多基本的圖像處理功能和算法。OpenCV 1.x主要關注實時計算機視覺,并且強調圖像處理的速度和準確性。OpenCV 1.x提供了多種圖像處理和分析方法,包括濾波、邊緣檢測、形態學處理、測量分析等;支持多種格式的圖像的讀取、保存和顯示,包括常見的BMP、JPEG、PNG等格式的圖像;提供了多種圖像變換和特征提取方法,如直方圖均衡化、色彩空間轉換、邊緣檢測等;支持多種窗口操作,如滑動窗口、固定窗口等,方便進行圖像分析和檢測等。

2.OpenCV 2.x

OpenCV 2.x是基于C++的版本,比OpenCV 1.x易用,具有更好的封裝和自動內存管理功能。在OpenCV 2.x中,所有類和函數都包含在命名空間“cv”中。與OpenCV 1.x相比,OpenCV 2.x更加靈活和強大,具有更多的特性和算法。在OpenCV 2.x中,可以基于面向對象的思想使用各種函數庫,使代碼更加清晰和易于維護。

另外,OpenCV 2.x中增加了許多新的功能和算法,如視頻分析、3D重建、機器學習等領域的功能和算法。OpenCV 2.x還支持多種語言接口,包括Python、Java和MATLAB等語言的接口。

3.OpenCV 3.x

OpenCV 3.x在OpenCV 2.x的基礎上進行改進和擴展,具有更多的新特性和算法。OpenCV 3.x進一步加強了面向對象的編程思想,使代碼更加簡潔、易讀和易于維護。OpenCV 3.x中增加了一些新的功能,例如深度學習、全景拼接、立體視覺等。此外,OpenCV 3.x還加強了與其他計算機視覺庫(如Halcon、Media SDK等)的集成和互操作性?!  ?/p>

4.OpenCV 4.x

OpenCV 4.x在OpenCV 3.x的基礎上進行了改進和擴展,如OpenCV 4.x中添加了新的模塊G-API,它可以作為基于圖形的圖像處理管線(pipeline)的引擎;OpenCV 4.x的dnn模塊支持ONNX(Open Neural Network Exchange,開放神經網絡交換)格式的網絡;OpenCV 4.x將二維碼檢測器和解碼器添加到objdetect模塊中,并將稠密逆搜索(Dense Inverse Search,DIS)光流算法從opencv_contrib轉移到video模塊。

相對于OpenCV 3.x,OpenCV 4.x增加了很多新的功能和算法,如神經風格遷移、目標檢測和跟蹤等。OpenCV 4.x還加強了代碼的優化和重構,提高了代碼的執行效率。

1.1.4 OpenCV-Python

OpenCV-Python是由原始OpenCV C++實現的Python包裝器,是OpenCV庫的Python接口。

Python是一種面向對象的、解釋型的計算機高級程序設計語言。Python 憑借語法簡潔、易于學習、功能強大、可擴展性強、跨平臺等特點,成為繼Java和C語言之后的又一熱門程序設計語言。它的簡單性和代碼可讀性使程序員能夠用更少的代碼實現功能。

但與C/C++相比,Python的執行速度較慢。Python可以使用C/C++輕松擴展,使用戶可以使用C/C++編寫計算密集型代碼,并使用Python進行封裝。使用OpenCV-Python主要有兩大好處:第一,代碼運行速度與原始C/C++代碼的一樣快,因為它在后臺運行的實際是C++代碼;第二,用Python編寫代碼比用C/C+容易。

OpenCV-Python需要使用NumPy庫,OpenCV在程序中使用NumPy數組存儲圖像數據。

1.1.5 龍芯平臺和OpenCV

龍芯平臺支持OpenCV,當前OpenCV開源社區已經支持LoongArch自主指令集架構(龍架構)?;邶埿酒脚_,用戶可以編寫程序、調用OpenCV接口來實現具體功能,如圖像與視頻I/O、二值圖像分析與處理、顏色空間轉換、視頻對象分析與跟蹤、邊緣輪廓檢測與提取、圖像特征提取與匹配、深度學習模型推理等。

龍芯平臺操作系統源中已經集成了OpenCV的相關軟件包,用戶只需要通過終端系統即可完成OpenCV的安裝。如在Loongnix 20系統上,直接通過以下命令即可安裝OpenCV。

sudo apt-get install libopencv-dev python3-opencv
主站蜘蛛池模板: 城步| 旺苍县| 泸西县| 皋兰县| 江北区| 朝阳市| 紫阳县| 平阴县| 隆林| 饶河县| 定州市| 平潭县| 胶州市| 祁东县| 琼海市| 历史| 南开区| 集安市| 靖安县| 泰安市| 梅州市| 大埔县| 昆山市| 吉木萨尔县| 建宁县| 桂林市| 建瓯市| 金秀| 眉山市| 秭归县| 永春县| 阜康市| 施甸县| 嵊泗县| 孙吴县| 晋中市| 安岳县| 满洲里市| 家居| 华容县| 安福县|