OpenCV4.x+ CUDA概述
OpenCV4.x中關(guān)于CUDA加速的內(nèi)容主要有兩個(gè)部分,第一部分是之前OpenCV支持的圖像處理與對象檢測傳統(tǒng)算法的CUDA加速;第二部分是OpenCV4.2版本之后開始支持的針對深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)模型的CUDA加速。這些內(nèi)容都在OpenCV的擴(kuò)展模塊中,想要獲取這OpenCV CUDA的支持,必須首先編譯OpenCV CUDA相關(guān)的模塊,這里主要是開展模塊以CUDA開頭的那些。此外編譯的電腦或者PC必須有N卡(英偉達(dá)GPU卡),并且按照好了正確版本的驅(qū)動(dòng)與cuDNN支持軟件。本文分為兩個(gè)部分來說明如何在OpenCV中實(shí)現(xiàn)CUDA加速,第一部分是實(shí)現(xiàn)CUDA支持版本OpenCV編譯,第二部分是OpenCV CUDA SDK編程代碼演示。
01
OpenCV+CUDA編譯與配置
首先說一下系統(tǒng)與相關(guān)軟件版本:
Window 10 x64
VS2015專業(yè)版
CMake 3.17.1
OpenCV4.4.0
OpenCV_contrib-4.4.0
CUDA10.0
cuDNN7.0
OpenCV4.4下載地址
https://github.com/opencv/opencv/releases/download/4.4.0/opencv-4.4.0-vc14_vc15.exe
OpenCV4.4擴(kuò)展模塊下載地址:
https://github.com/opencv/opencv_contrib/archive/4.4.0.zip
下載好OpenCV4.4極其擴(kuò)展模塊之后,我們就開始下面的編譯步驟。
第一步:打開CMake,設(shè)置好下面的目錄路徑,注意源代碼路徑需要指向真實(shí)的OpenCV的source目錄。圖示如下:
第一次運(yùn)行,記得參數(shù)選擇x64
如果成功運(yùn)行了config之后,請繼續(xù)完成下面的設(shè)置。
第二步:設(shè)置擴(kuò)展模塊路徑,勾選所有CUDA選項(xiàng)再次點(diǎn)擊config
點(diǎn)擊config運(yùn)行之后,再點(diǎn)擊generate安裝,如果一切OK即可完成CMake部分,下面就是到build的目錄下:
D:opencv-4.4.0opencvcudabuild
雙擊打開OpenCV.sln工程文件,切換到release模型下,右鍵點(diǎn)擊ALL_BUILD選擇【生成….】運(yùn)行完成,再次右鍵選擇install,選擇【生成…】這兩次過程都會(huì)比較漫長,編譯完成之后,就會(huì)得到intall目錄,我們需要的就是它,其它都可以刪掉了。這樣我們就完成了OpenCV CUDA的編譯。
注意點(diǎn):
可能看我編譯最多30分鐘完成這些操作(等待時(shí)間不計(jì)在內(nèi)),但是第一次這么干的新手會(huì)遇到各種問題,其中最常見的一個(gè)網(wǎng)絡(luò)問題就是無法下載第三方庫,導(dǎo)致CMake編譯失敗,這里時(shí)候需要手動(dòng)下載一下,然后copy到
D:opencv-4.4.0opencvsources3rdparty
文件下對于目錄內(nèi)即可。
在config的擴(kuò)展模塊的時(shí)候,請去掉所有test相關(guān)的模塊,然后選擇不編譯opencv_face模塊,原因是它會(huì)下載一些東西,但是網(wǎng)絡(luò)無法連接,這樣就可以cmake失敗。
完成了整個(gè)編譯過程之后,生成install之后就可以來配置OpenCV CUDA支持啦!跟配置正常OpenCV4版本相似,唯一不同的就是這里沒有opencv_world440.lib文件了,而且根據(jù)各個(gè)模型生成lib,需要把這些lib全部添加到鏈接器中,然后把庫目錄與包含目錄原來指向目錄都改到指向編譯以后的install內(nèi)相關(guān)目錄路徑,把vc14/bin目錄添加環(huán)境變量中去。重啟VS2015,即可完成全部配置過程。
上述步驟的詳細(xì)操作,B站視頻,直接這里觀看!
https://www.bilibili.com/video/BV1Rp4y1a7cm/
02
CUDA加速演示
OpenCV支持傳統(tǒng)的圖像處理的CUDA加速,從OpenCV4.2開始支持深度神經(jīng)網(wǎng)絡(luò)的CUDA加速,因此在OpenCV4.4中,CUDA是既可以加速傳統(tǒng)的圖像處理,特征與對象檢測;又可以支持深度神經(jīng)網(wǎng)絡(luò)的CUDA加速。下面的代碼首先查詢相關(guān)GPU
1cuda::getDevice()); 2intcount=cuda::getCudaEnabledDeviceCount(); 3if(count>0){ 4printf("GPUDeviceCount:%d ",count); 5}
設(shè)備信息,代碼與運(yùn)行截圖如下:
DNN人臉檢測加速
CPU上運(yùn)行OpenCV DNN人臉檢測:
GPU上運(yùn)行OpenCV DNN人臉檢測:
視頻背景分析
可以看出,無論是對傳統(tǒng)圖像處理的視頻背景分析,還是基于深度學(xué)習(xí)DNN人臉檢測,OpenCV CUDA都可以取得很好的加速效果。
注意:OpenCV4.4的CUDA導(dǎo)入跟之前的方式有所不同,模型頭文件更加模塊化,需要導(dǎo)入的頭文件如下:
1#include2#include 3#include 4#include 5#include 6#include 7#include
-
圖像處理
+關(guān)注
關(guān)注
27文章
1304瀏覽量
56911 -
OpenCV
+關(guān)注
關(guān)注
31文章
635瀏覽量
41593 -
CUDA
+關(guān)注
關(guān)注
0文章
121瀏覽量
13696
原文標(biāo)題:OpenCV4.X CUDA編譯與加速全解析
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用CUDA并行化矩陣乘法加速Blender Python
![使用<b class='flag-5'>CUDA</b>并行化矩陣乘法<b class='flag-5'>加速</b>Blender Python](https://file.elecfans.com//web2/M00/3F/00/pYYBAGJlEruAAaZdAABmyZg_tPc927.png)
OpenCV+CUDA編譯實(shí)現(xiàn)YOLOv5能加速
![<b class='flag-5'>OpenCV+CUDA</b>編譯<b class='flag-5'>實(shí)現(xiàn)</b>YOLOv5能<b class='flag-5'>加速</b>](https://file.elecfans.com/web2/M00/53/E1/poYBAGLUxU-AUARxAAAyYKBCs_c622.jpg)
如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測?
![如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b>中使用基于深度學(xué)習(xí)的邊緣檢測?](https://file1.elecfans.com/web2/M00/88/6F/wKgZomRm1zeAPjqdAAAHxLM9J0w761.png)
ELF 1技術(shù)貼|如何在Ubuntu中編譯OpenCV庫
![ELF 1技術(shù)貼|如<b class='flag-5'>何在</b>Ubuntu<b class='flag-5'>中</b>編譯<b class='flag-5'>OpenCV</b>庫](https://file1.elecfans.com/web2/M00/EB/90/wKgaomZZjUuAPcB7AAA6n2s3T5U762.png)
Vivado HLS視頻庫加速Zynq-7000 All Programmable SoC OpenCV應(yīng)用
如何讓opencv使用官方的GStreamer-rockchip實(shí)現(xiàn)硬件加速呢
如何在開發(fā)環(huán)境中的Python環(huán)境下使用我們提供的BM-OpenCV?
在Vivado中如何實(shí)現(xiàn)OpenCV設(shè)計(jì)
OpenCV Webinar 2丨如何在OpenCV中調(diào)用Tengine推理,實(shí)現(xiàn)開發(fā)效率翻倍
![<b class='flag-5'>OpenCV</b> Webinar 2丨如<b class='flag-5'>何在</b><b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>調(diào)用Tengine推理,<b class='flag-5'>實(shí)現(xiàn)</b>開發(fā)效率翻倍](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何在CUDA C/C++中實(shí)現(xiàn)主機(jī)和設(shè)備同步執(zhí)行
CUDA簡介: CUDA編程模型概述
![<b class='flag-5'>CUDA</b>簡介: <b class='flag-5'>CUDA</b>編程模型概述](https://file.elecfans.com//web2/M00/3E/3B/poYBAGJfz1SAc0eUAAAzEbPU_94657.png)
評論