C++ OpenCV';在更复杂的图像上,s-Canny检测速度较慢
我在机器人相机的流图像上使用Canny检测(寻找圆圈)。为了获得边缘之间的最大对比度,我将rgb图像分割成单独的通道,对每个通道执行Canny,然后按位或将边缘合并成一个合并图像。在简单图像上使用时,我的fps在30 fps时相对不受影响。当相机看到更复杂的图像时,fps下降到24 fps。这正常吗?如果是这样的话,我是否可以加快速度,以便继续以恒定的帧速率运行 以下是我正在使用的代码:C++ OpenCV';在更复杂的图像上,s-Canny检测速度较慢,c++,opencv,optimization,edge-detection,object-detection,C++,Opencv,Optimization,Edge Detection,Object Detection,我在机器人相机的流图像上使用Canny检测(寻找圆圈)。为了获得边缘之间的最大对比度,我将rgb图像分割成单独的通道,对每个通道执行Canny,然后按位或将边缘合并成一个合并图像。在简单图像上使用时,我的fps在30 fps时相对不受影响。当相机看到更复杂的图像时,fps下降到24 fps。这正常吗?如果是这样的话,我是否可以加快速度,以便继续以恒定的帧速率运行 以下是我正在使用的代码: vector<Mat> rgb; split(src, rgb); Canny( rgb[0]
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);
矢量rgb;
拆分(src、rgb);
Canny(rgb[0],rgb[0],cannyThreshold,cannyThreshold2,3);
Canny(rgb[1],rgb[1],cannyThreshold,cannyThreshold 2,3);
Canny(rgb[2],rgb[2],cannyThreshold,cannyThreshold2,3);
席状融合影像;
按位_或(rgb[0],rgb[1],合并图像);
按位_或(mergedImage,rgb[2],mergedImage);
事实上,这种行为是意料之中的
有三种方法可以加快速度:
- ,如果有,可以安装。您可能必须自己编译OpenCV才能启用此功能
- 使用OpenCV的GPU模块。方法
提供了在gpu上运行的Canny实现。如果您的视频卡支持CUDA或OpenCL,则OpenCV可以在GPU上运行某些算法。您可能必须自己编译OpenCV才能启用此功能gpu::Canny()
- 研究不同的方法:有时不同的算法集可以在更短的时间内获得相同的结果