草庐IT

opencv-cuda

全部标签

c++ - CUDA 和模板 : specialization declaration needed?

我有一个模板化包装函数,它调用在.cu文件中定义的内核(__global__)template__global__voidcompute_kernel(T*input,T*output,n){Mm;//computestuffusingm};templatevoidcompute(T*input,T*output,intn){//...computeblocks,threads,etc.compute_kernel>>(input,output,n);//...};和一个头文件包含在只有声明的主机代码中templatevoidcompute(T*input,T*output,intn)

c++ - 如何在 OpenCV 中查找图像中的轮廓?

我需要找到图像中的所有轮廓。我知道整个findcontours()和drawContours()的事情,但它使用我遇到麻烦的Canny边缘检测器。要使用查找轮廓,您需要使用精明的边缘检测或阈值图像。我无法对图像进行阈值处理,因为这会导致多个边缘变得模糊(边缘“合并”)。所以我决定使用Canny边缘检测。但是,当我确实使用它而不是获得完美的边缘时,我会得到各种带有间隙的线条。这使我无法获得良好的轮廓例如,我没有得到正方形的边缘,而是得到4条由小间隙分隔的单独线,导致我得到4个轮廓而不是一个。我尝试了扩张、打开、关闭、高斯模糊和基本上所有的形态学运算符,但这些都不起作用。有些不合并行,而有

c++ - OpenCV - 分配运算符 "not working"?

我有一个计算卷积的函数(测试我们是否使用了正确的filter2D设置),我认为函数体并不重要,所以这里只是标题和结尾:templatecv::Matconv(constcv::Mat&input,constcv::Mat&kernel){cv::Matoutput(input);//orshouldIratheruseoutput(input.rows,input.cols,input.depth())?...returnoutput;}cv::Matresult=conv(input,kernel);此时,我在result中得到了完全无用的结果(这些甚至不是随机数据,它们有一些奇怪的

c++ - 在 CUDA 线程中填充计数 'buckets'

在我的程序中,我通过体素网格跟踪大量粒子。粒子与体素的比例是任意的。在某个时刻,我需要知道哪些粒子位于哪些体素中,以及有多少粒子位于哪些体素中。具体来说,体素必须确切地知道其中包含哪些粒子。由于我不能在CUDA中使用任何类似std::vector的东西,我正在使用以下算法(在高级别):分配一个整数数组,其大小为体素数为所有粒子启动线程,确定每个粒子所在的体素,并在我的“桶”数组中增加适当的计数器分配一个大小为粒子数的指针数组计算每个体素在这个新数组中的偏移量(将其前面的体素中的粒子数相加)将粒子以有序的方式放置在数组中(我使用此数据来加速稍后的操作。速度的提高非常值得增加内存使用量)。

c++ - 从gpu特征描述符转换的opencv特征描述符的问题

我在使用openvc将GPU特征描述符矩阵转换为CPU特征描述符矩阵时遇到了一些问题,使用:voiddownloadDescriptors(constGpuMat&descriptorsGPU,vector&descriptors);如您所见,此方法将包含描述符的GpuMat转换为包含描述符的浮点vector。问题是,当我访问此vector的某些元素时,返回的值与0的预期间隔完全不同。至255.我制作了以下测试程序来比较提取时间和通过SURF_GPU获得的描述和SURF:clock_tstart;clock_tend;SURF_GPUsurfGPU;SURFsurf;Matimg1=i

【精选】多摄像头融合目标检测系统:OpenCV(部署教程&源码)

1.研究背景与意义随着计算机视觉和图像处理技术的快速发展,人们对于多摄像头拼接行人检测系统的需求日益增加。这种系统可以利用多个摄像头的视角,实时监测和跟踪行人的活动,为公共安全、交通管理、视频监控等领域提供重要的支持和帮助。在传统的行人检测系统中,通常只使用单个摄像头进行监测,这种方法存在一些局限性。首先,单个摄像头的视野有限,无法全面覆盖监测区域,导致行人漏检的情况较为常见。其次,由于单个摄像头的视角固定,行人在摄像头视野之外的区域无法被检测到,这给行人的追踪和监测带来了困难。此外,由于摄像头的位置和角度不同,行人在不同摄像头下的外观和姿态也会发生变化,增加了行人检测和跟踪的难度。为了解决以

c++ - OpenCV 无法使用 imwrite 写入图像

我正在尝试将我创建的Mat格式写入jpeg文件,但我得到的只是一个未处理的异常。从文档中可以看出Only8-bit(or16-bitunsigned(CV_16U)incaseofPNG,JPEG2000,andTIFF)single-channelor3-channel(with‘BGR’channelorder)imagescanbesavedusingthisfunction.所以我使用下面的代码创建了一个垫子:Matwatermark(5,5,CV_16U);imwrite("C:\\watermark.jpg",watermark);但是,我无法将图像写入jpeg。它适用于B

c++ - 我有两个 GPU,我怎么能只让其中一个执行特定的 CUDA 任务呢?

刚接触CUDA,但有一些时间花在计算上,我家里有geforces,办公室有tesla(同代)。在家里,我在同一台计算机上安装了两个gpus,一个是GK110(计算能力3.5),另一个是GF110(计算能力2.0),我更喜欢使用GK110仅用于计算任务,GF110用于显示,除非我告诉它进行计算,有没有办法通过驱动程序设置来完成,或者我仍然需要重写我的一些代码?另外,如果我没理解错的话,如果GK110的显示端口没有连接,那么烦人的windows超时检测即使计算时间很长也不会尝试重置它?顺便说一句,我的CUDA代码是用compute_35和compute20编译的,因此代码可以在两个GPU上

c++ - opencv .at 处理不同的图像类型

我有一些代码希望能够同时处理8位和16位图像。现在代码之间的唯一区别是8位代码使用:filename.at(i,j)16位代码使用:filename.at(i,j)现在最简单的方法是在顶部包含一个if语句来检查图像类型,然后我只有两个代码块来做同样的事情,但我想避免这种情况,因为维护变得有点麻烦疼痛。首先,我通读了OpenCV文档,但我可能没有看到它,但我没有看到任何返回Mat对象用于存储像素数据的数据类型的内容。所以如果我错过了它,我会觉得很傻,但那是最好的。我研究的另一个选项是函数指针,但我不确定是否可以为.at模板函数执行此操作。非常感谢对这些选项的任何建议。

c++ - 将 MPI 与 c++11 和 CUDA 相结合

我正在编写分子动力学模拟,一些内核将使用CUDA进行计算。我从使用一些c++11功能的普通CPU实现开始我的代码。现在我必须添加一些CUDA代码,我必须使用不支持c++11功能的编译器(gcc在我的makefile中,我分别从所有cpp文件创建对象,最后将它们全部链接在一起。此外,我的代码以这样一种方式拆分,即可以使用“现代”编译器编译没有CUDA的部分,而使用旧编译器编译其余部分(利用CUDA)。我现在的问题是,这是否可以,或者我是否会/可能会遇到问题? 最佳答案 我不知道Cuda,但我知道的是将C++98和C++11目标文件链接