Обнаружение Canny в OpenCV замедляет работу на более сложном изображении

Я использую Canny Detection для потокового изображения с камеры робота (ищу круги). Чтобы получить максимальный контраст между краями, я разделяю изображение rgb на отдельные каналы, выполняю Canny для каждого из них, затем поразрядно или края вместе в объединенное изображение. При использовании на простом изображении мой fps относительно не меняется при 30 кадрах в секунду. Когда камера видит более сложное изображение, частота кадров падает до 24 кадров в секунду. Это нормально? Если да, то могу ли я ускорить процесс, чтобы продолжить работу с постоянной частотой кадров?

Вот код, который я использую:

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);

2

Решение

Такое поведение действительно ожидается.

Есть 3 способа ускорить процесс:

  • OpenCV может выиграть от процессора Intel, если у вас есть, вы можете установить Intel IPP. Возможно, вам придется скомпилировать OpenCV самостоятельно, чтобы включить эту функцию.

  • Использовать графический модуль OpenCV. Метод gpu::Canny() обеспечивает реализацию благоразумный который работает на GPU. OpenCV может запускать определенные алгоритмы на графическом процессоре, если ваша видеокарта поддерживает CUDA или OpenCL. Возможно, вам придется скомпилировать OpenCV самостоятельно, чтобы включить эту функцию.

  • Исследовать другой подходИногда другой набор алгоритмов может достичь того же результата за меньшее время. Я кратко говорил об этом на ваш другой вопрос.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]