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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

OpenCV4.8 CUDA編程代碼教程

OpenCV學堂 ? 來源:OpenCV學堂 ? 2023-12-05 09:56 ? 次閱讀

OpenCV4.8 CUDA編程代碼教程

預計閱讀時間 :12 mins

01CUDA支持模塊

OpenCV4支持通過GPU實現CUDA加速執行,實現對OpenCV圖像處理程序的加速運行,當前支持加速的模塊包括如下:

圖像背景分割

視頻編解碼

特征2D

卷積濾波

圖像處理

對象檢測

光流

雙目視覺

基本上包含了OpenCV圖像處理的主要功能,這里有一個地方需要特別注意,就是編譯時候選擇不同的CUDA版本,對上述模塊的支持略微不同。比如最新的CUDA10.0來說已經不支持級聯檢測器的加速啦。 要想利用GPU實現CUDA OpenCV加速,第一步當然是重新編譯OpenCV源碼實現對CUDA的支持,這個可以參考我之前發的文章

OpenCV4 | 如何讓傳統圖像處理實現三十倍加速的頂級技能

收到大家的反饋,覺得視頻比較好,所以又錄制了一個OpenCV4 + CUDA加速編譯與配置的視頻教程

02代碼演示教程

檢測CUDA設備支持,代碼如下:

cuda::getDevice());
intcount=cuda::getCudaEnabledDeviceCount();
printf("GPUDeviceCount:%d
",count);

運行截圖:

99c0b300-92ab-11ee-939d-92fbcf53809c.png

CUDA處理圖像的時候,首先需要把Mat圖像上載到CUDA數據單元GpuMat對象中去,然后調用CUDA支持的相關API進行處理,處理完成之后,再從GpuMat下載數據到原始Mat對象中,完成后續操作。以圖像灰度轉換為例,代碼演示如下:

//灰度轉換
Matsrc_host=imread("D:/images/test.png");
GpuMatsrc,gray;
src.upload(src_host);
cuda::cvtColor(src,gray,COLOR_BGR2GRAY);
Matgray_host;
gray.download(gray_host);
imshow("src",src_host);
imshow("gray",gray_host);
waitKey(0);

CUDA支持各種卷積處理,卷積處理支持盒子模糊、高斯模糊、圖像梯度(SobleScharr)、二階導數算子-拉普拉斯算子、以高斯模糊為例,代碼演示如下:

cv::Math_img1=cv::imread("D:/images/test1.png");
cv::GpuMatd_img1,d_result3x3,d_result5x5,d_result7x7;

//加載數據
d_img1.upload(h_img1);

//創建高斯
autofilter3x3=cv::createGaussianFilter(CV_8UC3,CV_8UC3,cv::Size(3,3),5);
autofilter5x5=cv::createGaussianFilter(CV_8UC3,CV_8UC3,cv::Size(5,5),5);
autofilter7x7=cv::createGaussianFilter(CV_8UC3,CV_8UC3,cv::Size(7,7),5);

//執行
filter3x3->apply(d_img1,d_result3x3);
filter5x5->apply(d_img1,d_result5x5);
filter7x7->apply(d_img1,d_result7x7);

//獲取結果
cv::Math_result3x3,h_result5x5,h_result7x7;
d_result3x3.download(h_result3x3);
d_result5x5.download(h_result5x5);
d_result7x7.download(h_result7x7);

//顯示
cv::imshow("OriginalImage",h_img1);
cv::imshow("Blurredwithkernelsize3x3",h_result3x3);
cv::imshow("Blurredwithkernelsize5x5",h_result5x5);
cv::imshow("Blurredwithkernelsize7x7",h_result7x7);

waitKey(0);
return;

CUDA支持圖像的角點檢測,支持Harris與shi-tomas角點檢測,以shi-tomas角點檢測為例,代碼演示如下:

Matsrc_host=imread("D:/images/building.png");
imshow("input",src_host);
GpuMatsrc,gray,corners;
Matdst;
src.upload(src_host);
cuda::cvtColor(src,gray,COLOR_BGR2GRAY);
autocorner_detector=cuda::createGoodFeaturesToTrackDetector(gray.type(),1000,0.01,15,3);
corner_detector->detect(gray,corners);
corners.download(dst);
printf("detectedcorners%d....
",corners.cols);
for(inti=0;i(0,i);
circle(src_host,pt,3,Scalar(b,g,r),2,8,0);
}
imshow("cornerdetect",src_host);
waitKey(0);
return;

我們都知道OpenCV中的雙邊模糊是處理速度比較慢的邊緣保留算法,但是它的CUDA版本完全可以做到實時運行無壓力,在線美顏很輕松,代碼演示如下:

try{
Matsrc_host=imread("D:/images/example.png");
imshow("input",src_host);
GpuMatsrc(src_host);
GpuMatdst;
cuda::bilateralFilter(src,dst,0,100,15,4);
Matdst_host;
dst.download(dst_host);
imshow("result",dst_host);
}
catch(constException&ec){
std::cout<

CUDA還支持各種特征匹配,以ORB特征匹配為例,實現CUDA版本的特征匹配會比沒有CUDA版本的速度快到10倍以上,基本也可以達到實時級別。以ORB特征匹配為例,代碼演示如下:

//gpudata
cuda::GpuMatd_object_image;
cuda::GpuMatd_scene_image;

//cuda::GpuMatd_keypoints_scene,d_keypoints_object;//GPUkeypoints
vectorh_keypoints_scene,h_keypoints_object;//CPUkeypoints
cuda::GpuMatd_descriptors_scene,d_descriptors_object;//GPUdescriptor

//ImageCPUuploadedtoGPU
d_object_image.upload(h_object_image);
d_scene_image.upload(h_scene_image);

//對象檢測
autoorb=cuda::create();
//Detectfeaturepointsandextractcorrespondingdescriptors
orb->detectAndCompute(d_object_image,cuda::GpuMat(),h_keypoints_object,d_descriptors_object);
orb->detectAndCompute(d_scene_image,cuda::GpuMat(),h_keypoints_scene,d_descriptors_scene);

//BruteForceViolenceMatcher
Ptrmatcher=cuda::createBFMatcher(NORM_HAMMING);
vector>d_matches;
matcher->knnMatch(d_descriptors_object,d_descriptors_scene,d_matches,2);

std::cout<good_matches;
for(intk=0;k0))
{
good_matches.push_back(d_matches[k][0]);
}
}
std::cout<

CUDA支持各種光流算法,這里需要注意的時候,最新的OpenCV4中出現的DIS光流還不支持CUDA加速調用。CUDA光流算法支持調用基本上都可以達到70幀左右。調用CUDA加速的稠密光流法, CPU版本運行在10幀左右,CUDA加速效果很明顯。

//GPU光流法
cuda::cvtColor(frame,gray,COLOR_BGR2GRAY);
farn->calc(preGray,gray,flow);

//GPU數據處理
vectormm;
cuda::split(flow,mm);
cuda::cartToPolar(mm[0],mm[1],gMag,gAng);

上面所有的測試都是基于OpenCV4.8+ GTX 3050TI的顯卡 + Windows 10 系統上完成。

審核編輯:湯梓紅

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

    關注

    88

    文章

    3671

    瀏覽量

    94619
  • 代碼
    +關注

    關注

    30

    文章

    4872

    瀏覽量

    69913
  • OpenCV
    +關注

    關注

    31

    文章

    641

    瀏覽量

    42176
  • CUDA
    +關注

    關注

    0

    文章

    122

    瀏覽量

    13976

原文標題:10分鐘學會 OpenCV4.8 CUDA編程

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    Ubuntu系統下編譯OpenCV4.8源碼記錄

    支持,所以就用這個開發板給大家演示一下如何在烏班圖系統下編譯OpenCV4.8源碼與如何編譯執行OpenCV C++應用。
    的頭像 發表于 10-27 16:07 ?1902次閱讀
    Ubuntu系統下編譯<b class='flag-5'>OpenCV4.8</b>源碼記錄

    CUDA編程教程

    Nvidia CUDA 2.0編程教程
    發表于 03-05 07:30

    創建包圍輪廓的圓形邊界_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:創建包圍輪廓的圓形邊界
    發表于 06-06 15:39 ?3次下載

    初級圖像混合_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:初級圖像混合
    發表于 06-06 15:39 ?3次下載

    圖像對比度、亮度值調整_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:圖像對比度、亮度值調整
    發表于 06-06 15:39 ?2次下載

    實現多種重映射綜合示例_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:實現多種重映射綜合示例
    發表于 06-06 15:39 ?4次下載

    形態學圖像處理綜合示例_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:形態學圖像處理綜合示例
    發表于 06-06 15:52 ?8次下載

    圖像顯示_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:圖像顯示
    發表于 06-06 15:52 ?5次下載

    圖像濾波綜合示例_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:圖像濾波綜合示例
    發表于 06-06 15:52 ?6次下載

    OpenCV進行基本繪圖_《OpenCV3編程入門》書本配套源

    OpenCV3編程入門》書本配套源代碼:用OpenCV進行基本繪圖
    發表于 05-11 16:46 ?36次下載

    用morphologyEx進行圖像開運算_《OpenCV3編程入門》配套源代碼

    OpenCV3編程入門》書本配套源代碼:用morphologyEx進行圖像開運算
    發表于 06-06 15:52 ?11次下載

    用指針訪問像素_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:用指針訪問像素
    發表于 06-06 15:54 ?9次下載

    CUDA簡介: CUDA編程模型概述

    CUDA 編程模型中,線程是進行計算或內存操作的最低抽象級別。 從基于 NVIDIA Ampere GPU 架構的設備開始,CUDA 編程模型通過異步
    的頭像 發表于 04-20 17:16 ?3169次閱讀
    <b class='flag-5'>CUDA</b>簡介: <b class='flag-5'>CUDA</b><b class='flag-5'>編程</b>模型概述

    如何在OpenCV中實現CUDA加速

    OpenCV4.x中關于CUDA加速的內容主要有兩個部分,第一部分是之前OpenCV支持的圖像處理與對象檢測傳統算法的CUDA加速;第二部分是Ope
    的頭像 發表于 09-05 10:03 ?5262次閱讀

    OpenCV4.8+CUDA+擴展模塊支持編譯指南

    OpenCV4.8+CUDA+擴展模塊支持編譯指南
    的頭像 發表于 11-30 16:45 ?1229次閱讀
    <b class='flag-5'>OpenCV4.8+CUDA</b>+擴展模塊支持編譯指南
    主站蜘蛛池模板: 九九热免费观看 | 国产三级日本三级日产三级66 | 天堂网久久 | 黄色三级三级三级免费看 | 五月天婷婷在线免费观看 | 一区二区三区四区无限乱码在线观看 | 丁香亚洲综合五月天婷婷 | 成年免费大片黄在线观看免费 | 美女黄18以下禁止观看 | 激情五月深爱五月 | 美女毛片视频 | 免费在线色视频 | 午夜毛片网站 | 久热国产精品视频 | 亚洲综合精品一区二区三区中文 | 欧美线人一区二区三区 | 日韩三级观看 | 精品久久久久国产免费 | 欧美 亚洲 国产 精品有声 | 色噜噜噜噜噜在线观看网站 | 亚洲一区二区三区在线视频 | 免费jlzzjlzz在线播放视频 | 另类免费视频 | 天堂在线资源最新版 | 二级特黄绝大片免费视频大片 | 婷婷激情五月综合 | 欧美xxxxbbbb| 国产精品夜夜春夜夜爽久久 | 国产真实灌醉美女疯狂弄 | 三级黄色免费 | 激情五月视频 | 欧美人成a视频www | 日本黄色大片在线播放视频免费观看 | 天天狠狠弄夜夜狠狠躁·太爽了 | 欧美射射射 | 伊人网视频在线 | 国产成人精品三级在线 | 五月激情综合丁香色婷婷 | 午夜精品视频在线观看 | 六月婷婷精品视频在线观看 | 国产成人综合一区人人 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品