2012-04-05 5 views
1

Возможно ли выполнить обнаружение в блоге, где есть несколько областей интересов в кадре, используя OpenCV?Обнаружение BLOB в нескольких ROI в одном изображении/кадре, используя OpenCV - возможно ли это?

Я читал книгу «Learning OpenCV», основанную на API 1.x 'C', и я понял, что информация о ROI в IplImage учитывает как единый ROI, поэтому все операции предполагают единую ROI. Означает ли это, что я не могу работать с несколькими ROI?

Мое требование о множественном возврате инвестиций связано с желанием уменьшить обработку, в то время как я точно знаю, что интересующие меня капли, находящиеся примерно в 30-40% от общей площади изображения, разбиты на 3-4 регионы. Работа с полным изображением означает накладные расходы на 60-70% с точки зрения мощности/времени обработки. Или я пропустил что-то очень основное здесь?

Отредактировано:

Найдено this вопрос о SA, и похоже, что это может быть один подход. Если бы я понял это правильно, я мог бы использовать маску по всему фрейму, разоблачив несколько ROI, но не используя ROI per-se, в IplImage. Это правильно ? Кроме того, это служит моей цели сокращения требований к обработке, что было моей основной целью использования ROI?

+0

Я думаю, что использование маски может решить вашу проблему. Тем не менее, большинство алгоритмов итерации через маску, чтобы проверить, маскируется ли определенный пиксель, уменьшает время обработки, зависит от того, какую операцию вы выполняете. Один вопрос, почему бы не просто выполнить единый ROI за раз и умножить раз? – cxyzs7

+0

Спасибо, что нашли время, чтобы ответить, @ cxyzs7. Вы имеете в виду что-то вроде первого раздела кадра на несколько (например, размер ROI) подкадров, а затем обрабатывать каждый отдельно? Или, в каждом кадре, выполнять 4 операции, каждый раз устанавливая разные ROI? Если это последнее, кажется выполнимым и довольно элегантным, но почему-то у меня создалось впечатление, что вы однажды установили ROI ... что может быть неправильной интерпретацией с моей стороны. – icarus74

+1

Я имел в виду более поздний, что легко. Вы можете установить многократное увеличение ROI. – cxyzs7

ответ

1

В вашем случае, я думаю, вы можете установить один ROI за раз и выполнить свое обнаружение blob для каждой ROI. Помните, что результирующие координаты находятся в пространстве суб-изображения, вы можете преобразовать их обратно в исходное пространство изображения. Одна вещь, которую я лично нашел полезной: обычно ROI не является непрерывной памятью, если размер ROI довольно мал по сравнению с исходным изображением, копирование ROI как другого изображения и запуск вашего алгоритма на этом одиночном изображении может быть более быстрым, для пример:

for (int i = 0;i < numRects; ++i) { 
    cv::Mat subImg = img(rects[i]).clone(); 
    blobDetection(subImg); 
} 

Надеюсь, это поможет.

+0

Отлично. Я, конечно, собираюсь попробовать это и попытаюсь выяснить, какую скорость я получаю. – icarus74

Смежные вопросы