罷工助手在哪
927
2022-05-29
原文:https://zhuanlan.zhihu.com/p/19988205?columnSlug=hacker-and-painter
OpenCV 3 的改動在哪?
C 風格的API很快將會消失,完全被C++的API替代,代碼更加簡潔、不易出錯。讀者如果想借助opencv最新的功能,記得清理代碼中的C風格API。
C++ API 將更加簡潔。
所有的算法都將繼承自 cv::Algorithm 接口。
大型的模塊將拆分為小模塊,模塊將在后面繼續講解。
OpenCV 3 有這么多文件夾,從何入手?
3rdparty/,包含第三方的庫,比如視頻解碼用的 ffmpeg,jpg、png、tiff等圖片的開源解碼庫。
apps/,包含進行 haar 分類器訓練的工具,opencv 進行人臉檢測便是基于 haar 分類器。如果你想檢測人臉以外的圖片,千萬不要錯過這幾個工具。
cmake/,包含生成工程項目時 cmake 的依賴文件,用于智能搜索第三方庫,普通開發者不需要關心這個文件夾的內容。
data/,包含 opencv 庫以及范例中用到的資源文件,haar 物體檢測的分類器位于haarcascades子文件中。
doc/,包含生成文檔所需的源文件以及輔助腳本。
include/,包含入口頭文件。opencv 子文件夾中是 C 語言風格的API,也就是《Learning OpenCV (第一版)》中描述的API函數,官方將逐漸淘汰 C 風格函數,因此我不推薦大家使用該文件夾中的頭文件。opencv2 子文件中只有一個 opencv.hpp 文件,這是 cv2 以及 cv3 推薦使用的頭文件。
modules/,包含核心代碼,opencv 真正的代碼都在這個文件夾中。opencv 從2.0開始以模塊的方式組織各種功能,近兩年模塊的數量增長得很快,后面我會依次介紹每個模塊的作用。
platforms/,包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個操作系統中編譯供另一個系統使用的文件。
samples/,這是大家最喜歡的范例文件夾了,將在之后的文章中介紹。
我沒有 N 卡,該看哪些模塊?
androidcamera/,僅用于android平臺,使得可以通過與其他平臺相同的接口來控制android設備的相機。
core/,核心功能模塊,定義了基本的數據結構,包括最重要的 Mat 類、XML 讀寫、opengl三維渲染等。
imgproc/,全稱為 image processing,即圖像處理。包括圖像濾波、集合圖像變換、直方圖計算、形狀描述子等。圖像處理是計算機視覺的重要工具。
imgcodec/,負責各種格式的圖片的讀寫,這個模塊是從以前的 highgui 中剝離的。
highgui/,高級圖形界面及與 QT 框架的整合。
video/,視頻分析模塊。包括背景提取、光流跟蹤、卡爾曼濾波等,做視頻監控的讀者會經常使用這個模塊。
videoio/,負責視頻文件的讀寫,也包括攝像頭、Kinect 等的輸入。
calib3d/,相機標定以及三維重建。相機標定用于去除相機自身缺陷導致的畫面形變,還原真實的場景,確保計算的準確性。三維重建通常用在雙目視覺(立體視覺),即兩個標定后的攝像頭觀察同一個場景,通過計算兩幅畫面中的相關性來估算像素的深度。
features2d/,包含 2D 特征值檢測的框架。包含各種特征值檢測器及描述子,例如 FAST、MSER、OBRB、BRISK等。各類特征值擁有統一的算法接口,因此在不影響程序邏輯的情況下可以進行替換。
objdetect/,物體檢測模塊。包括haar分類器、SVM檢測器及文字檢測。
ml/,全稱為 Machine Learning,即機器學習。包括統計模型、K最近鄰、支持向量機、決策樹、神經網絡等經典的機器學習算法。
flann/,用于在多維空間內聚類及搜索的近似算法,做圖像檢索的讀者對它不會陌生。
photo/,計算攝影學。包括圖像修補、去噪、HDR成像、非真實感渲染等。如果讀者想實現Photoshop的高級功能,那么這個模塊必不可少。
stitching/,圖像拼接,可用于制作全景圖。
nonfree/,受專利保護的算法。包含SIFT和SURF,從功能上來說這兩個算法屬于features2d模塊的,但由于它們都是受專利保護的,想在項目中可能需要專利方的許可。
shape/,形狀匹配算法模塊。用于描述形狀、比較形狀。
softcascade/,另一種物體檢測算法,Soft Cascade 分類器。包含檢測模塊和訓練模塊。
superres/,全稱為 Super Resolution,用于增強圖像的分辨率。
videostab/,全稱為 Video Stabilization,用于解決相機移動時拍攝的視頻不夠穩定的問題。
viz/,三維可視化模塊。可以認為這個模塊實現了一個簡單的三維可視化引擎,有各種UI控件和鍵盤、鼠標交互方式。底層實現基于 VTK 這個第三方庫。
我愛 CUDA,買了一堆 Tesla 加速卡,該看哪些模塊?
這些模塊的名稱都以 cuda 為開始,cuda 是顯卡制造商 NVIDIA 推出的通用計算語言,在cv3中有大量的模塊已經被移植到了 cuda 語言。讓我們依次看一下:
cuda/,CUDA-加速的計算機視覺算法,包括數據結構 cuda::GpuMat、 基于cuda的相機標定及三維重建等。
cudaarithm/,CUDA-加速的矩陣運算模塊。
cudabgsegm/,CUDA-加速的背景分割模塊,通常用于視頻監控。
cudacodec/,CUDA-加速的視頻編碼與解碼。
cudafeatures2d/,CUDA-加速的特征檢測與描述模塊,與features2d/模塊功能類似。
cudafilters/,CUDA-加速的圖像濾波。
cudaimgproc/,CUDA-加速的圖像處理算法,包含直方圖計算、霍夫變換等。
cudaoptflow/,CUDA-加速的光流檢測算法。
cudastereo/,CUDA-加速的立體視覺匹配算法。
cudawarping/,實現了 CUDA-加速的快速圖像變換,包括透視變換、旋轉、改變尺寸等。
cudaev/,實現 CUDA 版本的核心功能,類似 core/ 模塊中的基礎算法。
結語
希望本文能對讀者了解下一代的 OpenCV 起到幫助,還有一些內容將在之后的文章中介紹,比如 samples 介紹,opencv_contrib 模塊是什么等等。
OpenCV 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。