OpenCV

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
OpenCV
OpenCV Logo with text svg version.svg
Тип

компьютерное зрение

Автор

Intel Corporation, Willow Garage Inc., Itseez Ltd.

Разработчик

Itseez

Написана на

С++, Java, Python

Операционная система

Linux, Mac OS X, iOS, Android и др. UNIX-подобные, Windows

Первый выпуск

2006 год

Последняя версия

2.4.9 (25 апреля 2014[1])

Состояние

активное

Лицензия

BSD

Сайт

http://opencv.org/

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).
  • Windows RT: портирован на ARM компанией Itseez [3]
  • 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;
}

Примечания[править | править вики-текст]

  1. OpenCV 2.4.9 is out!
  2. Bradsky G., Kaehler A. Learning OpenCV — O’Reilly, 2008. — C. 1 — ISBN 978-0-596-51613-0
  3. Блог компании «Itseez» Как мы портировали OpenCV на WindowsRT

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]