OpenCV
Материал из Seo Wiki - Поисковая Оптимизация и Программирование
OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, так же разрабатывается для Python, Ruby, Matlab и других языков[1]. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD.
Содержание |
[править] Применение
- Для утверждения общего стандартного интерфейса компьютерного зрения для приложений в этой области. Для способствования росту числа таких приложений и создания новых моделей использования PC.
- Сделать платформы Intel привлекательными для разработчиков таких приложений за счёт дополнительного ускорения OpenCV с помощью Intel® Performance Libraries (Сейчас включают IPP (низко-уровневые библиотеки для обработки сигналов, изображений, а также медиа-кодеки) и MKL (специальная версия LAPACK и FFTPack)). OpenCV способна автоматически обнаруживать присутствие IPP и MKL и использовать их для ускорения обработки.
- (Замечание - для работы OpenCV c IPP версии 5.3 необходимо скачать с сайта Intel и подменить файл cxswitcher.cpp -иначе IPP не будет обнаруживаться)
[править] Поддерживаемые платформы и инструменты
Сами библиотеки:
- Microsoft Windows: компиляторы Microsoft Visual C++ (6.0, .NET 2003), Intel Compiler, Borland C++, Mingw (GCC 3.x).
- GNU/Linux: GCC (2.9x, 3.x), Intel Compiler: «./configure-make-make install», RPM (spec файл включен в поставку)
- Используются C и «облегченный» C++. Прагмы и условная компиляция используются очень ограниченно.
Средства GUI, захват видео:
Документация: статический HTML
[править] Основные модули
[править] Ядро cxcore
- Базовые операции над многомерными числовыми массивами
- Матричная алгебра, математические ф-ции, генераторы случайных чисел
- DFT, DCT
- Запись/восстановление структур данных в/из XML/YAML
- Базовые функции 2D графики
- Поддержка более сложных структур данных: разреженные массивы, динамически растущие последовательности, графы
[править] CV — Модуль обработки изображений и компьютерного зрения
- Базовые операции над изображениями (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.)
- Анализ изображений (выбор отличительных признаков, морфология, поиск контуров, гистограммы)
- Структурный анализ (описание форм, плоские разбиения, …)
- Анализ движения, слежение за объектами
- Обнаружение объектов, в частности лиц
- Калибровка камер, элементы восстановления пространственной структуры
[править] Highgui — Модуль для ввода/вывода изображений и видео, создания пользовательского интерфейса
- Захват видео с камер и из видео файлов, чтение/запись статических изображений.
- Функции для организации простого UI (сейчас все демо приложения используют HighGUI)
[править] Cvaux — Экспериментальные и устаревшие функции
- Пространств. зрение: стерео калибрация, само калибрация
- Поиск стерео-соответствия, клики в графах
- Нахождение и описание черт лица
- Сравнение форм, построение скелетонов …
- Скрытые Марковские цепи
- Описание текстур
[править] CvCam — захват видео
Позволяет осуществлять захват видео (только в Windows), имеет несколько недоделок, поддержка прекращена.
[править] Скачать библиотеку можно тут
[править] Ссылки
- (страница на SourceForge. Отсюда можно загрузить последние версии)
- (Форум, подпишитесь и задайте свои вопросы)
- (OpenCV редактируемые страницы Wiki)
- (Emgu CV - регулярно-обновляемая привязка для C#)
- (SharperCV - привязка для C#)
- (привязки для Python. Будет включена в следующую версию OpenCV)
- (диалект Lisp от Яна Лекуна, с поддержкой OpenCV)
- (страница ПО Intel, включая IPP, компилятор и другие инструменты)
- (OpenPNL — открытая библиотека для работы с Байесовыми сетями)
- (множество ссылок на код алгоритмов компьютерного зрения)
- (создание проекта в c++ builder 6, распознавание лиц, поиск точки от лазера, более 10 тем)
[править] Пример проверки работы OpenCV с IPP
(При использовании IPP выигрыш по скорости в 5 раз!)[источник не указан 587 дней]
#include "stdio.h" #include "cv.h" #include "highgui.h" char name0[] = "image1.jpeg"; char name1[] = "image2.jpeg"; int main() { IplImage* img1 = NULL; IplImage* img2 = NULL; //cvNamedWindow("Image", 1); //load original image img1 = cvLoadImage(name0,1); img2 = cvLoadImage(name1,1); //cvUseOptimized(1); // load IPP //How to check whether IPP is used or not? const char* plugin_info = 0; double sm1, sm2, sm3; int Count = 100; printf("== Test for resizing images in OpenCV with IPP ==\n"); for (int j=0; j<2; j++) { if (j == 1) cvUseOptimized(0); // unload IPP cvGetModuleInfo(0,0,&plugin_info); bool ipp_is_used = plugin_info != 0 && strstr(plugin_info,"ipp")!=0; sm1=cvGetTickCount()/cvGetTickFrequency(); for (int i=0; i<Count; i++) { IplImage* newImage1 = NULL; IplImage* newImage2 = NULL; // resize the image newImage1 = cvCreateImage(cvSize((img1->width*2.55) ,(img1->height*3.77)), img1->depth, img1->nChannels); newImage2 = cvCreateImage(cvSize((img2->width*2.55) ,(img2->height*3.77)), img2->depth, img2->nChannels); cvResize(img1, newImage1); cvResize(img2, newImage2); // cvReleaseImage(&newImage1); cvReleaseImage(&newImage2); } sm2=cvGetTickCount()/cvGetTickFrequency(); sm3 = sm2 - sm1; if (ipp_is_used) printf("* IPP is used\n"); else printf("* IPP is not used! \n"); printf("* Iteration resize = %d \n", Count); printf("m=%f\n", sm3); int m, s, ms; m = sm3 / 60000000; s = (sm3 - m*60000000) /1000000; ms = (sm3 - (m*60000000)-(s*1000000)); printf("* Time - %d min %d sec %d msec \n",(int)(m), (int)s, (int)ms); printf("=================================================\n"); } cvReleaseImage(&img1); cvReleaseImage(&img2); //cvShowImage("Image", newImage1); //cvDestroyWindow( "Image" ); return 0; }
[править] Примечания
- ↑ Bradsky G., Kaehler A. Learning OpenCV - O'Reilly, 2008. - C. 1 - ISBN 978-0-596-51613-0
de:OpenCV en:OpenCV es:OpenCV fr:OpenCV he:OpenCV it:OpenCV ja:OpenCV ko:OpenCV pl:OpenCV pt:OpenCV sv:OpenCV zh:OpenCV