Научная статья на тему 'Открытые кроссплатформенные библиотеки (OpenGL, OpenAL, OpenCV) в курсах, читаемых по кафедре медиасистем и технологий'

Открытые кроссплатформенные библиотеки (OpenGL, OpenAL, OpenCV) в курсах, читаемых по кафедре медиасистем и технологий Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
277
61
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Открытые кроссплатформенные библиотеки (OpenGL, OpenAL, OpenCV) в курсах, читаемых по кафедре медиасистем и технологий»

Открытые

кроссплатформенные библиотеки (OpenGL, OpenAL, OpenCV) в курсах, читаемых по кафедре медиасистем и технологий

А.В. Самохина,

канд. техн. наук, доцент

В этой статье речь идет о двух предметах: «Компьютерная геометрия и графика» и «Основы обработки визуальной информации».

Компьютерная геометрия и графика - раздел науки, посвященный генерации (моделированию и воспроизведению) трехмерных сцен и преобразованию изображений.

«Основы обработки визуальной информации» - предмет, посвященный компьютерному зрению.

OpenGL

Open Graphics Library - библиотека, с помощью функций которой осуществляют моделирование, текстурирование и визуализацию (рендеринг) 3D-сцен.

OpenAL

Библиотека OpenAL (Open Audio Library) представляет собой бесплатную, кроссплатформенную библиотеку с открытым кодом для работы с 3D-звуком.

Большими плюсами этой библиотеки являются ее простота и то, что по стилю она очень сильно напоминает библиотеку OpenGL. В рамках изучения вышеназванных предметов OpenAL используется как дополнительная библиотека.

Библиотека OpenAL позволяет задавать в трехмерном пространстве различные источники звука и слушателя. И для каждого источника звука, и для слушателя можно задать ряд параметров (таких

как, положение, скорость и т. п.), влияющих на получающийся в результате звук.

OpenCV

Библиотека OpenCV (Open Computer Vision) является открытой библиотекой с набором функций для обработки, анализа и распознавания изображений и, кроме того, численных методов общего назначения.

Она является одной из наиболее известных open source библиотек, распространяющихся в условиях лицензии BSD, и может свободно использоваться для академических и коммерческих целей.

В версии 2.2 структура библиотеки реорганизована - теперь вместо больших универсальных модулей (cxcore, Cvaux, Highgui, Cvaux) библиотека OpenCV разделена на небольшие модули по функциональному использованию:

• opencv_core - ядро: базовые структуры, вычисления (математические функции, генерация псевдослучайных чисел, DFT, DCT, ввод/вывод в XML и т. п.);

• opencv_imgproc - обработка изображений (фильтры, преобразования и т. д.);

• opencv_highgui - простой UI, загрузка/сохранение изображений и видео;

• opencv_ml - методы и модели машинного обучения (SVM, деревья принятия решений и т. д.);

• opencv_features2d - различные дескрипторы (SURF);

• opencv_video - анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона);

• opencv_objdetect - детектирование объектов на изображении (вейвлеты Хаара, HOG и т. д.);

• opencv_calib3d - калибровка камеры, поиск стерео-соответствия и элементы обработки трехмерных данных;

• opencv_flann - библиотека быстрого поиска ближайших соседей (FLANN);

• opencv_contrib - сопутствующий код, еще не готовый для применения;

• opencv_legacy - устаревший код, сохраненный ради обратной совместимости;

• opencv_gpu - ускорение некоторых функций OpenCV за счет CUDA (NVidia).

Интеграция OpenCV в мультимедиа-проекты

Библиотека OpenCV используется совместно:

1) с низкоуровневыми библиотеками (OpenGL, OpenAL и др);

2) со среднеуровневыми платформами, включающими в себя

большой набор функций и библиотек для удобного программирования (openFrameworks и др.);

3) со средами «визуального программирования», позволяющими расширять себя плагинами, сделанными в низкоуровневых средах.

Об одной задаче переноса траектории с карты

на рельеф (пример применения OpenGL)

В этом параграфе рассказывается об одной из задач, при решении которых используются методы и технологии компьютерной графики, реализуемые с помощью функций библиотеки OpenGL (вернее, с помощью группы разноуровневых библиотек: OpenGL, glaux, glu, glut).

Исходные данные задачи

Задан рельеф местности набором 3D-точек на равномерной сетке по хи y И есть карта этой местности.

Требуется создать программный продукт, в котором были бы реализованы следующие возможности:

а) визуализировать рельеф с наложенной картой;

б) отдельно визуализировать карту;

в) при воздействии на карту получать отклик на рельефе.

Описание решения задачи

Работать будем, используя средства и методы объектно-ориентированного программирования. Цикл обработки сообщений нашего приложения создадим с помощью функций библиотеки glut. Эта же библиотека обеспечивает возможность иметь несколько окон приложения. Воспользуемся этой возможностью.

Для визуализации карты создадим 2D-окно. Загрузим оцифрованную карту и выведем ее в наше 2D-окно.

Для визуализации рельефа создадим 3D-окно. Заданную дискретную функцию (рельеф) будем аппроксимировать поверхностью Безье. На полученную 3D-сетку натянем уже подгруженную текстуру (карту).

Воздействие на карту реализуем в виде нескольких кликов мыши по карте в 2D-окне (проложим маршрут). В функции-обработчике сообщений от мыши реализуем вывод прокладываемого маршрута в 3D-окно на рельеф.

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

Вышеописанный алгоритм реализован в виде законченного программного продукта (.exe-файла), созданного в среде разработчика Visual Studio 2008 на языке C++ с подключенными библиотеками OpenGL, glaux, glu, glut.

На рис. 1 изображено 2D-окно с картой местности, на которой кликами мыши намечается маршрут. Обозначения: черная точка -город, белая пиния - дорога, звездочка - место клика мыши.

Рис. 1

На рис. 2 изображено 3D-окно с рельефом той же местности. В этом окне маршрут визуализируется уже на рельефе (черная линия).

аш

Рис. 2

В программе реализована свойственная 3D-приложениям возможность «поразглядывать» проложенный маршрут (масштабирование, повороты).

Обсуждение результатов

При проверке на различных рельефах оказалось, что в некоторых случаях тропинка частично прорисовывается «под землей».

Вывод

Аппроксимация по Безье здесь не совсем уместна. Лучше взять какой-нибудь из интерполяционных методов приближения многочленами небольшой степени.

Библиографический список

1 Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики / Е.А. Никулин. - СПб. : БХВ-Петербург, 2005.

2. ФрэнсисХилл. OpenGL. Программирование компьютерной графики / Хилл Фрэнсис. - СПб. : Питер, 2002.

3. Андре Ламот. Программирование игр для Windows / Ла-мот Андре. - M. : Вильямс, 2003.

4. АндреЛамот. Программирование трехмерных игр для Windows / Ламот Андре. - М. : Вильямс, 2004.

5. ЭдвардЭйнджел. Интерактивная компьютерная графика / Эйнджел Эдвард. - М. : Вильямс, 2001.

6. Форсайт Д Компьютерное зрение. Современный подход / Д. Форсайт, Ж. Понс. - М. : Вильямс, 2004.

7. Шапиро Л. Компьютерное зрение / Л. Шапиро, Дж.Сток-ман. - М. : БИНОМ Лаборатория знаний, 2006.

8. GaryBradski, Adrian Kaehler. Learning OpenCV. Computer vision with the OpenCV library. - O'Reilly, 2008.

Сайты

http://opengl.org.ru

http://openal.org

http://robocraft.ru/page/opencv/

http://opencv.willowgarage.com /documentation/cpp/

index.html

i Надоели баннеры? Вы всегда можете отключить рекламу.