![]() |
|
![]() ![]() ![]() |
|
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Привет всем!
Работаю в среде Visual 2005 на С++. для Windows ХР (возможно на W/2000 или типа того) Суть задачи: имеется BMP изображение,работаем с ним,как-то надо среди всех контуров выбрать нужный (т.е. объект), и показать его прямоугольником на исходной бмп-шке, кароч выделить объект на BMP изображении. Затем сохранить это изображение с выделенным объектом как второе bmp. Н-р, выделить рамкой машину на каком-то изображении, или выделить рамкой кружку,которая стоит на столе на столе... кто какими пользовался библиотеками или какие лучше... Может кто-нить сможет подсказать ход процесса....как нужно действовать,чтоб его выделить. илиу кто-нить есть близкая к этой задаче прога... Заранее Гроомадное спасибо ВСЕМ! Это сообщение отредактировал(а) Kasa89 - 23.8.2011, 18:07 |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
И еще неоднократно выйдет зайчик погулять... О чем это я?... Ах да, и еще неоднократно буду рекомендовать эту книжку.
По поводу же помочь написать, по Вашему описанию за вечер такое не сделаешь, поэтому вряд-ли кто-то из дружеских чувств смастерит. Следовательно видятся такие варианты подхода:
![]() Это сообщение отредактировал(а) _Y_ - 20.8.2011, 13:41 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Без проблем. Но конкретно описывайте - что хотите. Т.к. подобную задачу можно поставить и на супервысоком уровне (например, задача трекинга объектов - выделение рамками движущихся пешеходов и машин на видео, или поиск на фото морд лица и выделение их рамками). |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
_Y_, спасибо за советы, они бы оч помогли... с чего начать хотя б,какой метод подойдет.
VictorTsaregorodtsev, т.к. я полный новичок в этом)) то было принято решение сначала выделить объект пока на одной фотке, но по сути задача стояла- выделить на видео (.avi), выделение рамками движущихся объектов. Конкретного объекта мне не дали,поэтому надо как-то решить задачу для любого объекта. Т.е. выделить по цвету-не подходит, по размеру - хз, объекты то все разные. И как действовать? С чего начать - с одной картинки? хотя бы с кружки, вообще какие библиотеки подойдут (много слышала про openCV - вроде не для винды ХР, & GDI+), нужно ли переходить в монохромный и там искать контуры, а потом обратно переводить изоб-е... или проги у кого завалялись...буду оч благодарна! спасибо |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Kasa89, т.е. нужен именно тракинг движущегося объекта. Я такое делал на LabVIEW - довольно просто, но с использованием имевшихся там библиотек. В той книжке принципы их работы описаны, кстати. У меня была задача отследить перемещения робота в потоке видео с USB-камеры. Задавалось априори как выглядит робот с точки зрения камеры. А дальше на мониторе был виден робот, бегающий по экрану в наведенной на него рамке.
Если надо - могу поискать в бакапах и описать словесно как делалось. Но это вряд-ли поможет, т.к. там весь Шекспир был именно в библиотеках. Поэтому книжка та принесет гораздо большую пользу, чем мои рассказы о последовательности применения библиотек. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Было бы классно,если б народ подсказал хотя бы библиотеки, работающие с этим...
а если использовать несколько библиотек-они не будут конфликтовать? |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Kasa89, ну, наверное, этот вопрос надо задавать в ветке по С++. Вроде "Какие имеются библиотеки для обработки изображений и/или изображений в видеопотоке?". Наверняка есть. Но я бы еще спросил какие из них хорошие, а какие косые.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Как-как - с задачай поточнее определиться ;) Есть 2 варианта. 1) Четкое выделение нужных объектов. Тут можно специально обучать систему поиску-распознаванию нужных объектов. Например, см в сторону алгоритма Виолы-Джонса (на форуме его регулярно вспоминают) - для обучения поиску-выделению лиц, людей на изображении. 2) Вычитание из картинки некоторого "эталонного" фона (в качестве результата остаются объекты). Эталон фона либо предварительно фотается, либо восстанавливается в процессе обработки видео (но в последнем случае надо, чтобы объекты двигались - неподвижных объектов от фона ведь не отличить). В простейшем случае - всё великолепно (например, алгоритм chromakey для сплошного зелёного фона). Если же фон меняется (если, например, выделяются объекты на фоне живой природы, а листья-трава при этом колеблются ветром) или меняется освещение - то проблем больше (найденный эталон фона надо адаптировать). Также является проблемой отделение теней, отбрасываемых объектом, от объекта (если тени надо обязательно резать). В общем, тут объекты выделяются в виде криволинейных клякс, а рамками их потом можно при желании обвести. Но если стоит задача типа "видеокараоке" (выделить объект и перенести его на другой фон) - то, естественно, нужны не рамки, а реальная форма объектов. Со вторым вариантом я сейчас сам вожусь, нашел-скачал-прочитал полторы сотни статей на английском, запрограммировал уже 11 алгоритмов (половину - просто в качестве какого-то "наивного" эталона либо для понимания, куда нужно идти для повышения качества решения задачи, например, для понимания необходимости работы либо в цвете, либо в ч/б, для понимания необходимости работы либо с отдельными пикселами, либо с окрестностями пикселов (т.е. с текстурой изображения), и т.д.). Но моих рассказов о полученных практических результатах не будет - сами читайте статьи и думайте, что раскрыли, а о чём умолчали авторы, а также сами реализуйте алгоритмы и их тестируйте в конкретных Ваших условиях. Я максимум могу назвать алгоритм (как поступил выше, упомянув хромакей и Виолу-Джонса) или дать авторов-название какой-то статьи. |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
_Y_, а меня переместили сюда!
VictorTsaregorodtsev, спасибо за поддержку, в этом вопросе мало кто вообще станет помогать ) А ты как давно занимаешься этим проектом? Задача то ведь серьезная! и на чем пишешь...в какой среде... Тут еще есть одим вопрос,Victor. Может вообще он глупый! Но как ты думаешь, когда следует решить проблему о взаимодеиствии моей будущей проги по распознанию с картой видеозахвата? Просто один руководитель говорит что лучше понять это до того как начнешь писать,а другой говорит,что сначала напиши,а потом будешь думать как они будут взаимодействовать! |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 5 Всего: 121 |
Вообще-то в той же библиотеке OpenCV есть все необходимые средства для решения этой задачи. Эта библиотека собирается и под Windows.
В самой же библиотеке есть пример захвата видео с веб-камеры и поиска там лиц на основе уже упомянутого алгоритма Виолы-Джонса. Статей в интернете о OpenCV море, на русском в том числе. С минимальным количеством затрат эту задачу можно решить и средствами Matlab, в последней версии которого уже есть строенные toolbox'ы и для захвата видео, и для процессинга всех данных. Описание примеров решения такой задачи с помощью Matlab ещё больше, особенно на английском. В общем, задача очень распространённая и на начальном уровне можно вполне выехать на всём готовом. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Народ,как подключить библиотеку OpenCV (и какую) для Visual Studio 2005 (Microsoft Visual C++)?
|
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
А без библиотек быстродействие лучше?
если используешь,н-р, библиотеку OpenCV или пишешь свою прогу, т.е. без библиотек.... если нужно в итоге 25 кадров в секунду библиотека будет тормозить процесс немного? Это сообщение отредактировал(а) Kasa89 - 22.8.2011, 11:21 |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
нужно выделение рамкой, а выделение реальной формы объектов не нужно. Я работаю со вторым вариантом. Найти контрастные точки на изображении (работа с контрастом). Т.е. как ты и говорил, VictorTsaregorodtsev, либо двигается объект, и его можно найти на фоне, либо двигается (меняется) фон, и снова выделяется объект... Ну что-то вроде этого... |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Borland C++ Builder, сильно тяжелую математику при необходимости переписываю на ассемблере. Решайте сами. Там реально 2 блока программы получается - один касается настроек параметров видеозахвата, другой относится к грабежу отдельного кадра. Алгоритм распознавания должен взаимодействовать только со вторым блоком (хотя может и получать от первого блока отдельные результаты, типа установленного размера захватываемого кадра, чтобы сделать какие-то относящиеся к шагу инициализации вещи сразу после успешной настройке видеозахвата). В общем, я не вижу никаких проблем разделить видеозахват и алгоритм обработки. Объектно-ориентированное программирование рулит. От использования веб-камеры или карты видеозахвата ничего реально не меняется (т.к. захват реально пойдёт через VideoForWindows или через DirectShow, а эти стандартные виндовозовские интерфейсы уже сами будут использовать конкретный драйвер того или иного устройства; OPenCV - это вроде обёртка поверх DirectShow, я сам с OpenCV не работал - но веду весь этот разговор к тому, что под работу с каждым новым устройством прогу Вам переделывать не придётся, т.к. прога будет общаться с "промежуточным" (между драйвером реального устройства и Вашей прогой) универсальным (виндовозным или ещё более высокоуровневым библиотечным) программным интерфейсом).
Будет зависеть в первую очередь от реализованного алгоритма. У меня для веб-камеры с разрешением 640*480 все алгоритмы выдают без проблем 15 кадров в секунду, а 30 кадров в секунду уже для отдельных алгоритмов не идёт (но прога пока работает на одном ядре процессора, в однопоточном режиме - т.е. при распараллеливании проги 30 кадров пойдут). Но у меня просто суперские требования к качеству решения задачи (тени резать, к изменению искусственного и естественного освещения адаптироваться,...) - поэтому и алгоритмы использую с тяжеловесной математикой (хотя заказчик поначалу раскатывал губу до желания работы даже с 2мегапиксельными вебкамерами). |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Вопрос может и дурацкий... А как ее можно распараллелить? У тя обработка не в реальном времени? Добавлено через 44 секунды А вообще спасибо за инфу =) |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
вы сначала задачу нормально опишите.
неужно выделение конкретного объекта или объектов заданного типа? нужно ли сопровождать объект(трэкинг), движущийся объект? видео или все таки бмп? нужны готовые реализации? http://en.wikipedia.org/wiki/Content-based_image_retrieval определяют,используя тренировочные данные и классификаторы, что(~кошка,собачка,автобус...) находится на изображении и помечают рамкой. http://www.compvision.ru/forum/index.php?showtopic=607 chamfer matching(по предварительно заданному контуру находит на изображении объект\объекты) |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Обработка в реальном времени. Просто при тормозах проги вместо пропуска отдельных кадров (на обработку которых не хватает времени) начинается увеличение интервала времени между кадрами. Потому, что именно так работает использованный мной интерфейс видеозахвата (VideoForWindows - знаю, что старый и тормозной, но лень было писать новое, взял код видеозахвата из своей проги многолетней давности). Видео я в файл не пишу - а сразу показываю обработанный результат. Распараллелить - ну, например, один поток обрабатывает одну половину кадра, второй - вторую. |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Спасибо, Victor! все понятно =) я тут как-то про библиотеки спрашивала, ты же полюбому какими-то пользуешься? просто все так нахваливают openCV,я конечно понимаю что там много интересного)) даже сайт смотрела http://recog.ru |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
В данном случае - не пользуюсь никакими ни для захвата видео (работаю напрямую с Win32 API - с его относящимися к VideoForWindows структурами и макросами), ни для обработки картинок и результатов. И раньше тоже для графики и видео ничем не пользовался. |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
Есть ли какая-нить книжка по работе с изображениями БЕЗ ИСПОЛЬЗОВАНИЯ ДОПОЛНИТЕЛЬНО ПОДКЛЮЧЕННЫХ БИБЛИОТЕК на С++ - киньте пожалста ссылочку?
Как можно обратиться к координате и яркости конкретного пикселя (к цвету пикселя). Мне нужно найти контрастные точки на изображении - КАК это сделать, какими функциями? либо где почитать про эти функции? заранее спасибо |
|||
|
||||
mrgloom |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
не советую писать все своими руками. придется загружать его в бинарном виде через стандартные функции и парсить руками, попутно читая спецификацию на формат файла.
а так изображение обычно состоит из header+data. в header храниться информация о контенте, data это просто plain raw data. bmp наверно самый простой случай. bmp read/write ->google |
|||
|
||||
htoit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2011 Репутация: нет Всего: нет |
Используйте библиотеку OpenCV.
Если условие -- язык Си++, то без вариантов. Если такого условия нет, то используйте IMAQ-Vision, add-on пакета LabVIEW. Но IMAQ-Vision имеет недостатки: 1. проигрывает по быстродействию OpenCV, 2. не допускает тиражирование созданного продукта (лицензионные отчисления). Эта проблема тоже обходится: OpenCV интегрируется в LabVIEW -- см. например, http://sourceforge.net/search/?q=lvcv P.S. разбор bmp-файла -- самое простое в задаче. Его формат открыт и общедоступен: http://ru.wikipedia.org/wiki/BMP |
|||
|
||||
Kasa89 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.8.2011 Репутация: нет Всего: нет |
htoit, спасибо за инфу, еще раз убедилась в правильности выбора библиотеки =) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |