没有合适的资源?快使用搜索试试~ 我知道了~
OpenCV环境下CUDA编程示例.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 29 浏览量
2023-02-27
19:16:30
上传
评论
收藏 192KB PDF 举报
温馨提示
试读
17页
。
资源推荐
资源详情
资源评论
OpenCV 环境下 CUDA 编程示例
在 CUDA 平台上对图像算法进行并行加速是目前并行
计算方面比较简单易行的一种方式,而同时利用 OpenCV 提
供的一些库函数的话,那么事情将会变得更加 easy。以下是
我个人采用的一种模板,这个模板是从 OpenCV 里的算法
CUDA 源码挖掘出来的,我感觉这个用起来比较傲方便,所
以经常采用。首先大牛们写的源码都很鲁棒,考虑的比较全
面(如大部分算法将 1,3,4 通道的图像同时搞定),感觉还有
一个比较神奇的地方在于 CPU 端 GpuMat 和 GPU 端
PtrStepSzb 的转换,让我欲罢不能,一个不太理想的地方在
于第一帧的初始化时间比较长,应该是 CPU 到 GPU 的数据
传输。代码中有考虑流,但貌似没有使用。
我使用的是赵开勇的 CUDA_VS_Wizard,主函数还是用的
cu 文件。以下代码是对 Vibe 背景建模算法的并行,背景建
模算法是目前接触到易于并行的一类,如 GMM 等,而且加
速效果不错,因为一个线程执行的数据就是对应一个像素
点。
代码如下:
sample.cu
[cpp] view plaincopy<span
style="font-size:14px;">/*****************************
*************************************** * sample.cu
* This is a example of the CUDA program.
***************************************************
******************/ #include <stdio.h> #include
<stdlib.h> #include <cutil_inline.h> #include
<iostream> #include <string> #include
"opencv2/core/core.hpp" #include "opencv2/gpu/gpu.hpp"
#include "opencv2/highgui/highgui.hpp" #include
"Vibe_M_kernel.cu" #include "Vibe_M.h" using namespace
std; using namespace cv; using namespace cv::gpu;
enum Method { FGD_STAT, MOG,
MOG2, VIBE, GMG }; int main(int argc,
const char** argv) { cv::CommandLineParser cmd(argc,
argv, "{ c | camera | flase | use camera }"
"{ f | file | 768x576.avi | input video file }" "{ m |
method | vibe | method (fgd, mog, mog2, vibe,
gmg) }" "{ h | help | false | print help
message }"); if (cmd.get<bool>("help"))
{ cout << "Usage : bgfg_segm [options]"
<< endl; cout << "Avaible options:"
<< endl; cmd.printParams(); return
0; } bool useCamera =
cmd.get<bool>("camera"); string file =
cmd.get<string>("file"); string method =
cmd.get<string>("method"); if (method != "fgd"
&& method != "mog" && method !=
"mog2" && method != "vibe" &&
method != "gmg") { cerr << "Incorrect
method" << endl; return -1; }
Method m = method == "fgd" ? FGD_STAT : method ==
"mog" ? MOG : method == "mog2" ? MOG2 : method ==
"vibe" ? VIBE : GMG; VideoCapture cap; if
(useCamera) cap.open(0); else
cap.open(file); if (!cap.isOpened())
{ cerr << "can not open camera or video file"
<< endl; return -1; } Mat origin,
frame; cap >> origin;
cvtColor(origin,frame,CV_BGR2GRAY); GpuMat
d_frame(frame); Vibe_M vibe; GpuMat d_fgmask;
Mat fgmask; Mat fgimg; Mat bgimg;
switch (m) { case VIBE:
vibe.initialize(d_frame); break; }
namedWindow("image", WINDOW_NORMAL);
namedWindow("foreground mask", WINDOW_NORMAL);
for(;;) { cap >> origin; if
(origin.empty()) break;
cvtColor(origin,frame,CV_BGR2GRAY);
d_frame.upload(frame); //update the model
switch (m) { case VIBE:
vibe(d_frame, d_fgmask); break; }
d_fgmask.download(fgmask); imshow("image",
frame); imshow("foreground mask", fgmask);
int key = waitKey(30); if (key == 27)
break; else if(key == ' ')
{ cvWaitKey(0); } }
exit(0); } </span> Vibe_M.cpp
[cpp] view plaincopy<span
style="font-size:14px;">#include "Vibe_M.h"
namespace cv { namespace gpu { namespace device
{ namespace vibe_m { void
loadConstants(int nbSamples, int reqMatches, int radius, int
subsamplingFactor); void init_gpu(PtrStepSzb
frame, int cn, PtrStepSzb samples, PtrStepSz<unsigned
剩余16页未读,继续阅读
资源评论
G11176593
- 粉丝: 6669
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功