没有合适的资源?快使用搜索试试~ 我知道了~
OpenCV环境下CUDA编程示例.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 184 浏览量
2023-02-27
19:16:27
上传
评论
收藏 121KB DOCX 举报
温馨提示
试读
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,
cv::CommandLineParser cmd(argc,
"{ c | camera | flase | use camera }"
const char** argv) {
argv,
"{ f | file | 768x576.avi | input video file }"
"{ m |
method | vibe
gmg) }"
| method (fgd, mog, mog2, vibe,
"{ h | help | false | print help
message }");
{
if (cmd.get<bool>("help"))
cout << "Usage : bgfg_segm [options]"
cout << "Avaible options:"
<< endl;
<< endl;
cmd.printParams();
return
0;
}
bool useCamera =
cmd.get<bool>("camera");
cmd.get<string>("file");
cmd.get<string>("method");
string file =
string method =
if (method != "fgd"
&& method != "mog" && method !=
"mog2" && method != "vibe" &&
method != "gmg")
{
cerr << "Incorrect
return -1;
method" << endl;
}
Method m = method == "fgd" ? FGD_STAT : method ==
"mog" ? MOG : method == "mog2" ? MOG2 : method ==
"vibe" ? VIBE : GMG;
VideoCapture cap;
cap.open(0); else
if (!cap.isOpened())
if
(useCamera)
cap.open(file);
{
cerr << "can not open camera or video file"
<< endl;
frame;
return -1;
}
Mat origin,
cap >> origin;
cvtColor(origin,frame,CV_BGR2GRAY);
GpuMat
GpuMat d_fgmask;
Mat bgimg;
d_frame(frame);
Mat fgmask;
switch (m)
Vibe_M vibe;
Mat fgimg;
case VIBE:
break;
namedWindow("image", WINDOW_NORMAL);
{
vibe.initialize(d_frame);
}
namedWindow("foreground mask", WINDOW_NORMAL);
for(;;)
{
cap >> origin;
break;
if
(origin.empty())
cvtColor(origin,frame,CV_BGR2GRAY);
d_frame.upload(frame); //update the model
switch (m)
{
case VIBE:
break;
vibe(d_frame, d_fgmask);
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
loadConstants(int nbSamples, int reqMatches, int radius, int
subsamplingFactor); void init_gpu(PtrStepSzb
frame, int cn, PtrStepSzb samples, PtrStepSz<unsigned
{
void
剩余16页未读,继续阅读
资源评论
G11176593
- 粉丝: 6700
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功