- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我没能找到任何引用,除了:
http://answers.opencv.org/question/9512/how-to-bind-gpumat-to-texture/
其中讨论了 CUDA 方法。
理想情况下,我想用 cv::gpu::GpuMat
的内容更新 OpenGL 纹理,而不用复制回 CPU,也不直接使用 CUDA(尽管我认为这可能是在添加此功能之前是必需的)。
最佳答案
OpenCV 支持 OpenGL。请参见 opencv2/core/opengl_interop.hpp
头文件。您可以将 GpuMat 的内容复制到 Texture 中:
cv::gpu::GpuMat d_mat(768, 1024, CV_8UC3);
cv::ogl::Texture2D tex;
tex.copyFrom(d_mat);
tex.bind();
// draw something
您还可以使用 cv::ogl::Buffer
类。它是 OpenGL 缓冲存储器的包装器。此内存可以映射到 CUDA 内存而无需内存复制:
cv::ogl::Buffer ogl_buf(1, 1000, CV_32FC3);
cv::gpu::GpuMat d_mat = ogl_buf.mapDevice();
// fill d_mat with CUDA
ogl_buf.unmapDevice();
// use ogl_buf in OpenGL
ogl_buf.bind(cv::ogl::Buffer::ARRAY_BUFFER);
glDrawArray(...);
关于opengl - 是否可以将 OpenCV GpuMat 绑定(bind)为 OpenGL 纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18086519/
我的 CUDA 设备内存不足。我已经检测到原因 - 在我的一些成员函数中,我返回了一个 GpuMat 构建在我自己分配的数据上。这里的问题是 - 我如何释放这个内存? class Test { G
我想将图像上传到以下变量 gpu::GpuMat test;。首先将输入图像 (src) 转换为灰度图像 cvtColor( src, src_gray, COLOR_BGR2GRAY ); 然后上传
我正在尝试使用 OpenCV GpuMat,但出现断言错误,我的代码如下 #include "opencv2/opencv.hpp" #include "opencv2/imgproc/imgproc
下面是一个简单的程序,当我尝试将图像上传到 GPU 时,我的线程似乎停止了,其中 upload() 不返回。设备信息调用一切正常,并返回适当的值。 是否可以在线程中上传到 GPU? 如果是这样,我在下
我目前正在 Nvidia Jetson TX1/2 上进行开发。 我的代码中最慢的部分是(为便于阅读更改了变量名): .... cv::Mat A, B; GpuMat_A.download(A, C
我需要将视频流数据转换为 cv::gpumat。最初我尝试复制到 cv::Mat,然后使用上传将其加载到 gpumat。这个过程非常慢(640*480 帧需要 20 毫秒)。 我需要一种直接从 ope
这个问题在这里已经有了答案: program fails for array 30 x 30 (2 个答案) 关闭 5 年前。 我正在尝试使用以下代码迭代 cv::cuda::GpuMat: __g
opencv document about gpu::orb 我想用 gpu::orb 获取图像的关键点,关键点的类型是 gpuMat。然后我尝试访问 gpuMat 的数据作为文档。 我尝试了下面的代
我正在将opencv-python操作转换为c++ opencv::cuda,以获得更好的性能,但是我对CV_8UC1到CV_32FC1的转换存在问题。 我要转换的Python代码: img_gray
reduce(const GpuMat& mtx, GpuMat& vec, int dim, int reduceOp, int dtype=-1, Stream& stream=Stream::N
我正在使用 opencv::cuda 进行一些图像处理,所以我最终得到的是一个 cv::cuda::GpuMat。我现在想使用 ffmpeg 对其进行编码(这样我就可以选择编码器是否进行硬件加速)。现
我正在研究光线追踪器。我想通过使用 GPU 将每个像素的数据保存在 OpenCV Mat 中来优化我的代码。 现在,我将像素值保存在缓冲区 fb 中,它是一个包含三个值 (RGB) 的 vector
当我编译这个例子时: #include #include "opencv2/opencv.hpp" #include "opencv2/gpu/gpu.hpp" int main (int argc
我正在尝试使用 GpuMat 数据编写自定义内核来查找图像像素的反余弦。当 GPU 有 CV_8UC1 数据但字符不能用于计算反余弦时,我可以在上传数据时上传、下载和更改值。但是,当我尝试将我的 GP
我在尝试从 cv::Mat 转换为 gpu::Mat 时遇到问题。我正在使用 VS2012 Win7 x64。 这是代码: #include "opencv2/imgproc/imgproc.hpp"
我正在尝试在 C++ 中运行模型推理。 我使用 torch.jit.trace 在 Python 中成功追踪了模型。 我可以使用 torch::jit::load() 在 C++ 中加载模型。 我能够
我的系统上有多个 GPU,我想找到一种简单的方法来确定 cv::cuda::GpuMat 分配在哪个 GPU 上。例如,忽略错误: int numDevices = cv::cuda::getCuda
如何通过尽可能少的复制操作将 cv::gpu::GpuMat 行传输到 std::vector? 我能想到的最快的方法是: GpuMat fooGpu(numRows, numCols, CV_32F
我在 Win 8.1 64 位机器上使用 OpenCV 3.0 和 VS2012 C++/CLI。 我想知道创建指向 Gpumat 的 C++ 指针的正确方法是什么。 目前,我定义了一些指针,例如:
我是 CUDA 和 C 的新手,我可以在以下方面使用一些帮助:我想将 GpuMats 的 C 数组传递给 CUDA 内核: 这是我的内核代码: __global__ void disparit
我是一名优秀的程序员,十分优秀!