OpenCV的Canny Detection在更复杂的图像上变慢

时间:2013-11-24 22:53:22

标签: c++ opencv optimization edge-detection object-detection

我在机器人相机的流式图像上使用Canny Detection(寻找圆圈)。为了获得边缘之间的最大对比度,我将rgb图像分割成单独的通道,在每个通道上执行Canny,然后按位或边缘一起成为合并图像。在简单图像上使用时,我的fps相对不受影响,速度为30 fps。当相机看到更复杂的图像时,fps降至24 fps。这是正常的吗?如果是这样,无论如何我是否可以加快速度,以便我可以继续以恒定的帧速率运行?

这是我正在使用的代码:

vector<Mat> rgb;
split(src, rgb);

Canny( rgb[0], rgb[0], cannyThreshold, cannyThreshold2, 3);
Canny( rgb[1], rgb[1], cannyThreshold, cannyThreshold2, 3 );
Canny( rgb[2], rgb[2], cannyThreshold, cannyThreshold2, 3 );

Mat mergedImage;
bitwise_or(rgb[0], rgb[1], mergedImage);
bitwise_or(mergedImage, rgb[2], mergedImage);

1 个答案:

答案 0 :(得分:2)

确实存在这种行为。

有三种方法可以加快速度:

  • OpenCV can benefit from an Intel processor,如果您有,可以安装 Intel IPP 。您可能需要自己编译OpenCV才能启用此功能。

  • 使用OpenCV的GPU模块。方法gpu::Canny()提供了在GPU上运行的 Canny 的实现。如果您的视频卡支持CUDA或OpenCL,OpenCV可以在GPU上运行某些算法。您可能需要自己编译OpenCV才能启用此功能。

  • 研究一种不同的方法:有时一组不同的算法可以在较短的时间内达到相同的效果。 I talked briefly about this on your other question