在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenCV的起源和應用領域

新機器視覺 ? 來源:IT外包 ? 作者:IT外包 ? 2022-10-10 15:02 ? 次閱讀

當下人工智能的發展是前所未有的迅猛,而計算機視覺(Computer Vision)無疑是人工智能一個非常重要的分支,計算機視覺的發展也成為了很多科研人員和業界開發人員聚焦的熱點。我們常說的無人駕駛、智能安防、人臉識別、文字識別、以圖搜圖、VR/AR、3D重構等等都是以計算機視覺做為技術基礎的應用實踐。

在計算機視覺項目的開發中,OpenCV作為最大眾的開源庫,擁有了豐富的常用圖像處理函數庫,采用C/C++語言編寫,可以運行在Linux/Windows/Mac等操作系統上,能夠快速的實現一些圖像處理和識別的任務。此外,OpenCV還提供了javapython、cuda等的使用接口機器學習的基礎算法調用,從而使得圖像處理和圖像分析變得更加易于上手,讓開發人員更多的精力花在算法的設計上。

本文主要介紹OpenCV開發的一些基礎知識以及入門上手的方法。

1、OpenCV的起源背景

OpenCV誕生于Intel研究中心,其目的是為了促進CPU密集型應用。為了達到這一目的,Intel啟動了多個項目,包括實時光線追蹤和三維顯示墻。一個在Intel工作的OpenCV作者在訪問一些大學時,注意到許多頂尖大學中的研究組(如MIT媒體實驗室)擁有很好的內部使用的開放計算機視覺庫(在學生們間互相傳播的代碼),這會幫助一個新生從一個很高的起點開始ta的計算機視覺研究。這樣一個新生可以在以前的基礎上繼續開始研究,而不用去從底層編寫基本函數。

因此,OpenCV的目的是開發一個普遍可用的計算機視覺庫。在Intel的性能庫團隊的幫助下,OpenCV實現了一些核心代碼以及算法,并發給Intel俄羅斯的庫團隊。這就是OpenCV的誕生之地:在與軟件性能庫團隊的合作下,它開始于Intel的研究中心,并在俄羅斯得到實現和優化(這再一次驗證了俄羅斯程序員的卓越之處!)。

俄羅斯團隊的主要負責人是俄羅斯人Vadim Pisarevsky,他負責管理項目、寫代碼并優化OpenCV的大部分代碼,在OpenCV中很大一部分功勞都屬于他。跟他一起,Victor Eruhimov幫助開發了早期的架構,Valery Kuriakin管理俄羅斯實驗室并提供了很大的支持。在開始時,OpenCV就定下了以下三大目標:

(1)為基本的視覺應用提供開放且優化的源代碼,以促進視覺研究的發展。能有效地避免“閉門造車”。

(2)通過提供一個通用的架構來傳播視覺知識,開發者可以在這個架構上繼續開展工作,所以代碼應該是非常易讀的且可改寫。

(3)本庫采用的協議不要求商業產品繼續開放代碼,這使得可移植的、性能被優化的代碼可以自由獲取,可以促進基于視覺的商業應用的發展。

這些目標說明了OpenCV的緣起。計算機視覺應用的發展會增加對快速處理器的需求。與單獨銷售軟件相比,促進處理器的升級會為Intel帶來更多收入。這也許是為什么這個開放且免費的庫出現在一家硬件生產企業中,而不是在一家軟件公司中。從某種程度上說,在一家硬件公司里,在軟件方面會有更多創新的空間。就像華為這樣的網絡通訊設備公司,與硬件相配套的軟件也是非常的強大!

2、OpenCV簡介

OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它是輕量級的,而且是高效的,由一系列C函數和少量C++類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。

OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python、Java and MATLAB/OCTAVE的接口。這些語言的API接口函數可以通過在線文檔獲得。如今也提供對于C#、Ruby等的支持。

OpenCV是一個用于圖像處理、分析、機器視覺方面的開源函數庫。無論你是做科學研究,還是商業應用,OpenCV都可以作為你理想的工具庫,因為對于這兩者,它完全是免費的。

同時,由于計算機視覺與機器學習密不可分,該庫也包含了比較常用的一些機器學習算法,比如圖像識別、機器視覺在安防領域有廣泛的應用。但很少有人知道,在航拍圖片、街道圖片(例如google street view)中,要嚴重依賴于機器視覺的攝像頭標定、圖像融合等技術。

近年來,在入侵檢測、特定目標跟蹤、目標檢測、人臉檢測、人臉識別、人臉跟蹤等領域,OpenCV可謂大顯身手,而這些,僅僅是其應用的冰山一角。

如今,來自世界各地的各大公司、科研機構的研究人員,共同維護支持著OpenCV的開源庫開發。這些公司和機構包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋。

計算機視覺市場巨大而且持續增長,且這方面沒有標準API,如今的計算機視覺軟件大概有以下三種:

(1)研究代碼(慢,不穩定,獨立并與其他庫不兼容)

(2)耗費很高的商業化工具(比如Halcon, MATLAB+Simulink

(3)依賴硬件的一些特別的解決方案(比如視頻監控,制造控制系統,醫療設備)這是如今的現狀。

如果能有一個統一的標準API,將簡化計算機視覺程序和解決方案的開發,而OpenCV致力于成為這樣的標準API。

OpenCV致力于真實世界的實時應用,通過優化的C代碼的編寫對其執行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數庫(Integrated Performance Primitives)得到更快的處理速度(注:OpenCV 2.0版的代碼已顯著優化,無需IPP來提升性能,故2.0版不再提供IPP接口)。下圖為OpenCV與當前其他主流視覺函數庫的性能比較。

3、OpenCV內部構成

OpenCV主體分為五個模塊,其中四個模塊如下所示:

e5705784-485a-11ed-a3b6-dac502259ad0.png

OpenCV的CV模塊包含基本的圖像處理函數和高級的計算機視覺算法。ML是機器學習庫,包含一些基于統計的分類和聚類工具。HighGUI包含圖像和視頻輸入/輸出的函數。CXCore包含OpenCV的一些基本數據結構和相關函數。

目前,OpenCV的最高版本為OpenCV4.3.0。其中OpenCV3.0和OpenCV2.0的版本相比,改動比較大,主要改動如下:

(1)大體上保留了OpenCV 2經典的C++和Python編程接口風格。其中,Python接口大大增強,也加入了Python 3.x的支持。一般來說,以前版本的程序只要做少數修改,就可以使用OpenCV 3了。另外還改善了Java接口,并且加入了MATLAB支持。

(2)架構調整。圖片、視頻編解碼從highgui模塊分離出來,組成了imgcodecs和videoio。原先的OpenCL模塊ocl事實上與其 它模塊融為一體,而CUDA加速模塊gpu分解成了數個以cuda開頭的模塊。此外,除了官方支持的OpenCV代碼,還有一些自發貢獻的內容、不穩定的 內容,或者版權尚存爭議的內容,都放到了新的倉庫opencv_contrib中。

(3)更多新算法。新版本包括了TLD、魚眼鏡頭模型等全新算法,還包括了一些更高層次可以直接拿來用的高級封裝,比如汽車檢測等。

(4)引入T-API,使OpenCL加速更容易。目前可以參考OpenCV源代碼中T-API的范例。可以發現,開啟和關閉OpenCL加速,只需要一個語句就夠了。這也就是為什么ocl模塊會消失了吧。

(5)更多指令集優化。除了之前為Intel CPU做的優化以外,OpenCV 3還容納了ARM平臺NEON指令集的支持。通過英特爾的幫助,OpenCV 3對x86和x64平臺默認使用IPP。下圖是OpenCV3.0中部分函數得到加速的示意圖。

e59d2dae-485a-11ed-a3b6-dac502259ad0.png

下面主要介紹OpenCV3.0版本的東西。

OpenCV3.0的sources文件結構:

(1)3rdparty/,包含第三方的庫,比如視頻解碼用的 ffmpeg,jpg、png、tiff等圖片的開源解碼庫。

(2)apps/,包含進行 haar 分類器訓練的工具,opencv 進行人臉檢測便是基于 haar 分類器。如果你想檢測人臉以外的圖片,千萬不要錯過這幾個工具。

(3)cmake/,包含生成工程項目時 cmake 的依賴文件,用于智能搜索第三方庫,普通開發者不需要關心這個文件夾的內容。

(4)data/,包含 opencv 庫以及范例中用到的資源文件,haar 物體檢測的分類器位于haarcascades子文件中。

(5)doc/,包含生成文檔所需的源文件以及輔助腳本。

(6)include/,包含入口頭文件。opencv 子文件夾中是 C 語言風格的API,也就是《Learning OpenCV (第一版)》中描述的API函數,官方將逐漸淘汰 C 風格函數,因此我不推薦大家使用該文件夾中的頭文件。opencv2 子文件中只有一個 opencv.hpp 文件,這是 cv2 以及 cv3 推薦使用的頭文件。

(7)modules/,包含核心代碼,opencv 真正的代碼都在這個文件夾中。opencv 從2.0開始以模塊的方式組織各種功能,近兩年模塊的數量增長得很快,后面我會依次介紹每個模塊的作用。

(8)platforms/,包含交叉編譯所需的工具鏈以及額外的代碼,交叉編譯指的是在一個操作系統中編譯供另一個系統使用的文件。

(9)samples/,范例文件夾。

常用模塊介紹:

(1)androidcamera/,僅用于android平臺,使得可以通過與其他平臺相同的接口來控制android設備的相機。

(2)core/,核心功能模塊,定義了基本的數據結構,包括最重要的 Mat 類、XML 讀寫、opengl三維渲染等。

(3)imgproc/,全稱為 image processing,即圖像處理。包括圖像濾波、集合圖像變換、直方圖計算、形狀描述子等。圖像處理是計算機視覺的重要工具。

(4)imgcodec/,負責各種格式的圖片的讀寫,這個模塊是從以前的 highgui 中剝離的。

(5)highgui/,高級圖形界面及與 QT 框架的整合。

(6)video/,視頻分析模塊。包括背景提取、光流跟蹤、卡爾曼濾波等,做視頻監控的讀者會經常使用這個模塊。

(7)videoio/,負責視頻文件的讀寫,也包括攝像頭、Kinect 等的輸入。

(8)calib3d/,相機標定以及三維重建。相機標定用于去除相機自身缺陷導致的畫面形變,還原真實的場景,確保計算的準確性。三維重建通常用在雙目視覺(立體視覺),即兩個標定后的攝像頭觀察同一個場景,通過計算兩幅畫面中的相關性來估算像素的深度。

(9)features2d/,包含 2D 特征值檢測的框架。包含各種特征值檢測器及描述子,例如 FAST、MSER、OBRB、BRISK等。各類特征值擁有統一的算法接口,因此在不影響程序邏輯的情況下可以進行替換。

(10)objdetect/,物體檢測模塊。包括haar分類器、SVM檢測器及文字檢測。

(11)ml/,全稱為 Machine Learning,即機器學習。包括統計模型、K最近鄰、支持向量機、決策樹、神經網絡等經典的機器學習算法。

(12)flann/,用于在多維空間內聚類及搜索的近似算法,做圖像檢索的讀者對它不會陌生。

(13)photo/,計算攝影學。包括圖像修補、去噪、HDR成像、非真實感渲染等。如果讀者想實現Photoshop的高級功能,那么這個模塊必不可少。

(14)stitching/,圖像拼接,可用于制作全景圖。

(15)nonfree/,受專利保護的算法。包含SIFT和SURF,從功能上來說這兩個算法屬于features2d模塊的,但由于它們都是受專利保護的,想在項目中可能需要專利方的許可。

(16)shape/,形狀匹配算法模塊。用于描述形狀、比較形狀。

(17)softcascade/,另一種物體檢測算法,Soft Cascade 分類器。包含檢測模塊和訓練模塊。

(18)superres/,全稱為 Super Resolution,用于增強圖像的分辨率。

(19)videostab/,全稱為 Video Stabilization,用于解決相機移動時拍攝的視頻不夠穩定的問題。

(20)viz/,三維可視化模塊。可以認為這個模塊實現了一個簡單的三維可視化引擎,有各種UI控件和鍵盤、鼠標交互方式。底層實現基于 VTK 這個第三方庫。

Cuda加速模塊,cuda 是顯卡制造商 NVIDIA 推出的通用計算語言,在cv3中有大量的模塊已經被移植到了cuda 語言。

(1)cuda/,CUDA-加速的計算機視覺算法,包括數據結構 cuda::GpuMat、 基于cuda的相機標定及三維重建等。

(2)cudaarithm/,CUDA-加速的矩陣運算模塊。

(3)cudabgsegm/,CUDA-加速的背景分割模塊,通常用于視頻監控。

(4)cudacodec/,CUDA-加速的視頻編碼與解碼。

(5)cudafeatures2d/,CUDA-加速的特征檢測與描述模塊,與features2d/模塊功能類似。

(6)cudafilters/,CUDA-加速的圖像濾波。

(7)cudaimgproc/,CUDA-加速的圖像處理算法,包含直方圖計算、霍夫變換等。

(8)cudaoptflow/,CUDA-加速的光流檢測算法。

(9)cudastereo/,CUDA-加速的立體視覺匹配算法。

(10)cudawarping/,實現了 CUDA-加速的快速圖像變換,包括透視變換、旋轉、改變尺寸等。

(11)cudaev/,實現 CUDA 版本的核心功能,類似 core/ 模塊中的基礎算法。

4、在VS2013中配置使用OpenCV

了解了OpenCV 的數據結構和功能后,下面介紹OpenCV 的配置,Win7 64 + VSW2013 + OpenCV3.0步驟。

(1)下載安裝OpenCV 3.0。下載地址:https://opencv.org/releases/。

(2)配置環境變量:計算機屬性->高級系統設置->環境變量->Path->變量值。

e5b14622-485a-11ed-a3b6-dac502259ad0.png

(3)配置VS2013。首先打開VS2013建立一個Win32控制臺項目。然后,在“項目->工程屬性->vc++目錄”中,加入包含目錄

..opencvuildinclude; ..opencvuildincludeopencv;

..opencvuildincludeopencv2。(..代表opencv安裝的文件夾目錄)

e5d2eb60-485a-11ed-a3b6-dac502259ad0.png

加入庫目錄..opencvuild\x64vc12lib。

e5e8d7d6-485a-11ed-a3b6-dac502259ad0.png

“項目->工程屬性->鏈接器->輸入->附加依賴”中添加附加依賴項。

opencv_ts300d.lib;opencv_world300d.lib

e6164734-485a-11ed-a3b6-dac502259ad0.png

配置完成后,就可以在VS2013中使用OpenCV3.0中的函數了。

5、在VS2013中簡單的調用OpenCV

經過以上的基礎知識介紹后,就可以進行入門的實踐了。在上面配置完成的工程中,來顯示一幅幅圖片,驗證一下是否成功。

在解決方案資源管理器中,打開源文件main.cpp(沒有可以自己創建),添加以下代碼

#include

using namespace cv;

int main(){

Mat src = imread("lena.jpg"); //圖片必須添加到工程目錄下

imshow("src ", src);

waitKey();

}

然后點擊本地Windows調試器,或者按F5運行程序,程序啟動后就可以顯示這張圖像了

6、總結

本文簡單的介紹了OpenCV的起源和應用領域,以及基本數據結構和組成,可以作為OpenCV開發的一般入門指導。希望能對大家有所幫助。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2113

    瀏覽量

    73742
  • 調試器
    +關注

    關注

    1

    文章

    306

    瀏覽量

    23783
  • 計算機視覺
    +關注

    關注

    8

    文章

    1699

    瀏覽量

    46051
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41421

原文標題:計算機視覺軟件庫OpenCV的開發基礎介紹

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA應用領域及解決方案

    FPGA應用領域及解決方案
    發表于 08-20 11:23

    最新OpenCV專題出爐啦~最全OpenCV教程及各種圖像處理、目標跟蹤、識別案例

    OpenCV基礎知識及應用領域設計,包含OpenCV教程、OpenCV識別、OpenCV跟蹤及OpenC
    發表于 07-06 14:41

    ibeacon的應用領域有哪些?

    請教各位大神,ibeacon在近年來漸漸雄起,請問你們覺得ibeacon的應用領域有哪些?給一些使用的例子。。。
    發表于 08-16 09:05

    1206封裝貼片電容應用領域

    封裝貼片應用領域有著以下幾點:1、NCC-常規系列1206封裝貼片電容應用領域 適用于一般電子電路Suitable for、通訊設備、電腦周邊、電源及智能手機各種電路應用。2、高壓品-HVC系列(高壓
    發表于 08-11 11:57

    請問ibeacon的應用領域有哪些?

    請教各位大神,ibeacon在近年來漸漸雄起,請問你們覺得ibeacon的應用領域有哪些?給一些實用的例子。。。
    發表于 05-14 05:55

    電動機的應用領域

    電動機應用廣泛,下面為您揭曉目前電動機重要的七大應用領域
    發表于 02-05 06:27

    核電池都有哪些應用領域?

    核電池都有哪些應用領域?
    發表于 03-11 06:16

    plc是什么?plc有哪些應用領域

    plc是什么?plc的特點有哪些?plc的應用領域主要在哪些地方?
    發表于 07-05 07:35

    DSP芯片有哪些應用領域

    DSP是如何定義的?DSP芯片有哪些應用領域
    發表于 10-15 08:02

    ARM Linux下OpenCV的移植和使用方法

    應用領域非常廣泛,包括圖像拼接、圖像降噪、產品質檢、人機交互、人臉識別、動作識別、動作跟蹤、無人駕駛等。本篇介紹ARM Linux下OpenCV的移植和簡單使用。2.環境介紹2.1.硬件1) NUC972開...
    發表于 11-03 07:01

    Linux技術的應用領域

      近幾年嵌入式的就業趨勢是相當不錯的,日常生活中的智能手機、智能家居、智能家電、無人車、無人機等等領域都是嵌入式軟件的重要應用領域。嵌入式工程師待遇怎樣?先來了解下零基礎參加Linux培訓后發展前景如何。   在計算機行業中Linux工程師前景是比較好的,Linux技術
    發表于 11-05 08:18

    描述嵌入式Linux的應用領域

    描述嵌入式Linux的應用領域非常廣泛,所以現在學習嵌入式linux的人也是逐漸上升啊!對于嵌入式linux而言,主要的應用領域有信息家電、PDA 、機頂盒、Digital Telephone
    發表于 11-05 09:06

    最全OpenCV教程及圖像處理、目標跟蹤、識別案例

    本專題主要幫助讀者快速入門 OpenCV,而無需到處搜尋參考資料,為你免除大量自行搜索的時間,本專題主要給大家介紹OpenCV基礎知識及應用領域設計,包含OpenCV教程、
    發表于 07-06 14:11
    最全<b class='flag-5'>OpenCV</b>教程及圖像處理、目標跟蹤、識別案例

    OpenCV起源應用領域

    因此,OpenCV的目的是開發一個普遍可用的計算機視覺庫。在Intel的性能庫團隊的幫助下,OpenCV實現了一些核心代碼以及算法,并發給Intel俄羅斯的庫團隊。
    的頭像 發表于 08-28 10:53 ?7887次閱讀

    Halcon和Opencv圖像處理庫對比

    在工業視覺領域屬于經常使用的軟件,相對于opencv的開源精神Halcon屬于商業非開源項目并且收費。Halcon起源于德國在國內的工業視覺領域市場占用率遙遙領先。
    的頭像 發表于 12-20 10:30 ?1101次閱讀
    主站蜘蛛池模板: 亚洲三级网址| 久久新视频| 久久人成| 国模掰开| cijilu刺激 国产免费的| 欧美午夜色视频国产精品| 日本免费看黄| 天堂资源bt| 成人国产精品一级毛片了| 俄罗斯女人69xxx| www.黄com| 女bbbbxxxx另类亚洲| 亚洲视频精选| 999毛片免费观看| 国产精品一区电影| fc2 ppv sss级素人美女| 午夜久久久久久| 亚洲偷图色综合色就色| 天堂中文资源在线地址| 国内精品免费视频自在线| 看片国产| 婷婷丁香五月中文字幕| 婷婷色九月综合激情丁香| 亚洲人成一区| 亚洲欧洲国产精品你懂的| 日本天堂影院在线播放| 久久久噜噜噜久久网| 99久久综合给久久精品| 就去色播| 亚洲视频在线网| 性色在线观看| 美女视频黄视大全视频免费网址| 日本经典在线三级视频| 国外免费一级| 天天爽天天干| 女同激情视频| 一区二区三区视频网站| 亚洲免费二区三区| 天堂网视频在线| 国产做a爰片久久毛片a| 奇米影视四色7777|