Я использую OpenCV 2.4 (C ++) для поиска линий на изображениях в градациях серого. Это включает в себя некоторые основные этапы обработки изображения, такие как размытие, порог, детектор краев Канни, фильтр градиента или преобразование Хафа. Я должен применить алгоритм поиска строк к тысячам изображений.
Есть ли способ ускорить расчет с учетом большого количества изображений?
Помогает ли одно из следующего? Intel TBB, IPP или графический процессор OpenCV?
Я слышал, что OpenCV GPU может ускорить вычисления, но передача данных происходит медленно. Таким образом, использование GPU может быть неправильным выбором здесь?
Благодарю вас!
РЕДАКТИРОВАТЬ:
Есть ли какой-то смысл в использовании parallel_for от TBB для ускорения обработки изображений? Если я использую для цикла, как это:
for(int i=0; i<image_location.size();++i)
{
Mat img=imread(image_location[i]);
blur(img...);
threshold(img...);
...
}
Могу ли я улучшить производительность, используя вместо этого parallel_for? Кто-нибудь может привести примеры, как использовать parallel_for, включая некоторые операции opencv?
Сфера вашего вопроса практически безгранична.
Прежде всего, вы измерили производительность вашего приложения, чтобы обнаружить фактические узкие места? Я думаю, что это преобразование Хафа, но кто знает, что еще делает ваш код? Теперь, если преобразование Хафа — медленная часть, и предположим, что OpenCV имеет быструю реализацию, то по этой причине я говорю вам, что вопрос проблематичен. Изменение в несколько лучшую реализацию мало помогает, когда вы решаете увеличить и без того большое количество изображений, проблема в самом подходе.
Вам действительно нужно использовать Hough? Может быть, вы могли бы достичь чего-то подобного / лучшего, используя морфологические операторы? Изображения из какого-то общего домена? Можете ли вы привести примеры их? И т. Д.
Других решений пока нет …