2015-04-19 3 views
0

Я пытаюсь запустить камеру со скоростью 30 кадров в секунду и выполнять обработку изображений с одинаковой скоростью. Для изображений размером 640 x 480, используя cvCvtColor для преобразования изображения RGB в HSV, время обработки составляет примерно 15 кадров в секунду.opencv время выполнения для преобразования rgb в hsv

В настоящее время пользователь должен иметь возможность указать 2 значения HSV, и программа должна вернуть двоичное изображение всех пикселей в этом диапазоне.

Так что прямо сейчас, я конвертирую все изображение в пространство HSV, используя cvCvtColor и использую cvInRangeS.

Как уменьшить время обработки до 30 кадров в секунду?

Я использую vc2010 с OpenCV

+0

Можете ли вы опубликовать некоторые профилирующие результаты? Это кажется слишком большим, чтобы быть реальным. –

ответ

0

Вы можете создать таблицу поиска для RGB-значений (только массива с 256 ** 3 записей в течение 8UC3 изображений) и проверить каждый входящий пиксель против этой таблицы ,

Другим подходом было бы просто проверить каждый девятый (или что-то в этом роде) пиксель вашего входного изображения и расширить вашу маску вывода. Если вы хотите определить цвета, то смежные пиксели будут иметь очень похожий цвет очень часто, так что выходные изображения будут выглядеть очень похожими.

+0

, если исходные данные в битах 8/8/8, один вариант - потратить 16 Мбайт для таблицы поиска. что больше, чем кеш, создает значительную стойкость процессора, даже 16777216 - это огромный способ, который приводит к узкому месту? это можно сделать. –

+0

для скрытого подхода не могу понять, что я хочу только конвертировать из rgb в hsv, а затем порождать его на двоичное изображение операция расширения для двоичного img или для rgb img ?? –

+0

Если вы считаете, что таблица размером 16 МБ слишком велика, просто создайте таблицу lookup только для четных значений R, G и B. Вы используете небольшую точность, а таблица имеет только 2 МБ. Для второго подхода: вы просто проверяете, имеет ли каждый девятый пиксель ((для (int x = 0; x <ширина; x + = 2) ...) правильный цвет и помечены этими пикселями на вашем выходном изображении. чтобы заполнить промежутки между пикселями ckecked. – FooBar

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