建议实时图像处理

时间:2012-05-10 13:37:30

标签: opencv image-processing cuda opencl

我真的需要一些帮助和建议,因为我是实时图像处理的新手。

我正在尝试为相机获得1000fps的系统实现算法,我需要获取所有图像中每个像素的值,并对N中像素[i] [j]的演变进行不同的计算图像的数量,用于图像中的所有像素。我有(unsigned char * ptr)我想将它们传输到GPU并开始使用CUDA实现算法并将数据返回给CPU。 但我不确定什么是实时处理的最佳选择。我的系统:CPU Intel Xeon x5660 2.8Ghz(2个处理器)GPU NVIDIA Quadro 5000 问题是我希望确保在获得1000fps并将其传递给GPU进行处理时,如何确保我不会丢失任何数据以便下一次从抓取器传入? 我需要在c ++中实现多线程吗?和OpenCV / OpenCL / CUDA中的parralel编程? 如果您有任何想法或建议,请告诉我。我真的需要一些专家的实时图像处理建议。谢谢

1 个答案:

答案 0 :(得分:14)

如您所知,OpenCV使用CUDA框架在GPU中实现了它的一些功能。

您可以编写自己的CUDA代码/函数来处理数据并将其转换为OpenCV格式而不会出现任何问题。我演示了如何在cuda-grayscale上执行此操作。我想这个例子可以回答你的大部分问题。

请注意 OpenCV 2.3.1使用CUDA 4.0 OpenCV 2.4仅适用于CUDA 4.1

关于这句话:

  

我希望确保在获得1000fps时将其传递给GPU进行处理

您很可能无法像来自相机一样快速处理帧。如果您不想丢弃任何帧,您可以忘记实时(我假设您没有使用非常小的图像(10x15))。

如果您确实需要使用1000 FPS,则必须实施缓冲机制来存储来自设备的帧。这就是我们开始讨论多线程系统的实现的地方:应用程序的主线程将负责从相机中抓取帧并将它们存储在缓冲区中,并且第二个线程将从缓冲区读取并对帧执行处理。

有关如何实施缓冲机制的信息,请检查:

How to implement a circular buffer of cv::Mat objects (OpenCV)?

Thread safe implementation of circular buffer

C + OpenCV: IplImage with circular buffer