- OpenCV
-
OpenCV Тип Автор Intel Corporation, Willow Garage Inc., Itseez Ltd.
Разработчик Написана на Операционная система Linux, Mac OS X, Android и др. UNIX-подобные, Windows
Первый выпуск 2006
Последняя версия Состояние активное
Лицензия Сайт OpenCV (англ. Open Source Computer Vision Library, библиотека компьютерного зрения с открытым исходным кодом) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков[2]. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии 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).
- Linux: GCC (2.9x, 3.x), Intel Compiler: «./configure-make-make install», RPM (spec файл включен в поставку)
- Mac OS X: GCC (3.x, 4.x)
- Android
- iOS — неофициально
- Используются C и «облегченный» C++. Прагмы и условная компиляция используются очень ограниченно.
Средства GUI, захват видео:
Документация: статический HTML, PDF.
Основные модули
В версии 2.2 библиотека была реорганизована. Вместо универсальных модулей cxcore, cvaux, highGUI и других было создано несколько компактных модулей с более узкой специализацией:
- opencv_core — основная функциональность. Включает в себя базовые структуры, вычисления(математические функции, генераторы случайных чисел) и линейную алгебру, DFT, DCT, ввод/вывод для XML и YAWL и т. д.
- opencv_imgproc — обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.).
- opencv_highgui — простой UI, ввод/вывод изображений и видео.
- opencv_ml — модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.).
- opencv_features2d — распознавание и описание плоских примитивов (SURF (англ.)русск., FAST и другие, включая специализированный фреймворк).
- opencv_video — анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона).
- opencv_objdetect — обнаружение объектов на изображении (нахождение лиц с помощью алгоритма Виолы-Джонса (англ.), распознавание людей HOG и т. д.).
- opencv_calib3d — калибровка камеры, поиск стерео-соответствия и элементы обработки трехмерных данных.
- opencv_flann — библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV.
- opencv_contrib — сопутствующий код, ещё не готовый для применения.
- opencv_legacy — устаревший код, сохраненный ради обратной совместимости.
- opencv_gpu — ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidia.
Пример проверки работы OpenCV с IPP
#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; }
Примечания
- ↑ OpenCV v2.4.3 released
- ↑ Bradsky G., Kaehler A. Learning OpenCV — O’Reilly, 2008. — C. 1 — ISBN 978-0-596-51613-0
Литература
Ссылки
Категории:- Программное обеспечение по алфавиту
- Графические библиотеки
- Свободные библиотеки программ
- Применение искусственного интеллекта
- Библиотеки Си
Wikimedia Foundation. 2010.