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), имеет несколько недоделок, поддержка прекращена.

Скачать библиотеку можно тут

Ссылки

Пример проверки работы OpenCV с IPP

(При использовании IPP выигрыш по скорости в 5 раз!)[источник не указан 2156 дней]

#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. Bradsky G., Kaehler A. Learning OpenCV - O'Reilly, 2008. - C. 1 - ISBN 978-0-596-51613-0
cs:OpenCV

de:OpenCV en:OpenCV es:OpenCV fr:OpenCV he:OpenCV it:OpenCV ja:OpenCV ko:OpenCV pl:OpenCV pt:OpenCV sv:OpenCV zh:OpenCV

Источник — «http://www.sbup.com/wiki/OpenCV»
Личные инструменты

Served in 0.162 secs.