OpenCV шаг за шагом. Установка OpenCV под OC Linux


1. OpenCV шаг за шагом. Введение.
2. Установка под Windows
Установка OpenCV под OC Linux

Рассмотрим процесс установки библиотеки OpenCV под ОС Linux на примере дистрибутива Ubuntu 10.10, но с незначительными вариациями должно сработать и под другими дистрибутивами (проверялось под Debian, ALT Linux).

Для установки OpenCV нужно скачать (UPD: официальный сайт) архив с исходными текстами.
Скачаем последнюю (на данный момент) версию:
OpenCV-2.2.0.tar.bz2

Сборка проекта осуществляется с помощью CMake (требуется версия 2.6 или выше).
Можно установить CMake в виде пакета

sudo apt-get install cmake

apt-cache show cmake
говорит, что сейчас доступна версия 2.8.2

, либо из исходников. Для этого нужно скачать архив cmake-2.8.3.tar.gz с официального сайта cmake.org

сборка и установка CMake осуществляется без проблем:

tar -zxf cmake-2.8.3.tar.gz
cd cmake-2.8.3
./configure
make
make install

далее, для отображения окошек OpenCV требуется установленная библиотека GTK+ 2.x или выше, в том числе заголовочные файлы (libgtk2.0-dev)

устанавливаем:

apt-get install libgtk2.0-dev

теперь можно собрать саму библиотеку OpenCV

tar -xjf OpenCV-2.2.0.tar.bz2
cd OpenCV-2.2.0
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ./
make
make install

попробуем собрать примеры, которые идут в составе библиотеки:

cd samples/c/
chmod +x build_all.sh
./build_all.sh

зпустим один из примеров:
./delaunay
здесь вы увидите либо красивую картинку, либо ошибку

error while loading shared libraries: libopencv_core.so.2.2: cannot open shared object file: No such file or directory

— это значит, что программа не может найти требуемые библиотеки, пропишем их путь:

$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

здесь может выявиться ошибка:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /usr/src/OpenCV-2.2.0/modules/highgui/src/window.cpp, line 274
terminate called after throwing an instance of 'cv::Exception'
  what():  /usr/src/OpenCV-2.2.0/modules/highgui/src/window.cpp:274: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvNamedWindow

— это значит что вы забыли установить заголовочные файлы GTK+ 2.x: libgtk2.0-dev — выполните установку этого пакета и заново пересобирите OpenCV.

После установки заголовочные файлы OpenCV находятся в каталоге:

/usr/local/include/opencv

, а библиотечные файлы лежат в:

/usr/local/lib

Попробуем самостоятельно собрать программу с OpenCV:

test.cpp

//
// for testing
//
// robocraft.ru
//

#include <cv.h>
#include <highgui.h>

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
	IplImage* image=0, *dst=0;

	// имя картинки
	char filename[] = "Image0.jpg";

	// получаем картинку
	image = cvLoadImage(filename, 1);

	printf("[i] image: %s\n", filename);
	assert( image != 0 );

	// покажем изображение
	cvNamedWindow( "image");
	cvShowImage( "image", image );

	// ждём нажатия клавиши
	cvWaitKey(0);

	// освобождаем ресурсы
	cvReleaseImage(& image);
	cvReleaseImage(&dst);

	// удаляем окна
	cvDestroyAllWindows();
	return 0;
}

Makefile

CC 		:= g++
CFLAGS 		:= -I/usr/local/include/opencv -L/usr/local/lib
OBJECTS 	:= 
LIBRARIES 	:= -lopencv_core -lopencv_imgproc -lopencv_highgui

.PHONY: all clean

all: test

test: 
	$(CC) $(CFLAGS) -o test test.cpp $(LIBRARIES)
	
clean:
	rm -f *.o

остаётся выполнить команду

make

и получить исполняемый файл test

результат:

Ссылки
http://cmake.org
http://opencv.willowgarage.com/wiki/InstallGuide_Linux
http://opencv.willowgarage.com/wiki/CompileOpenCVUsingLinux


13 комментариев на «“OpenCV шаг за шагом. Установка OpenCV под OC Linux”»

  1. Ещё заметочка:
    Чтобы не вбивать каждый раз сточку $ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    в консоль, можно вбить в .bashrc
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

    • без этого можно обойтись, если прописать в Makefile в качестве флагов компилятора вот такую строчку:

      -I/usr/local/include/opencv -L/usr/local/lib -Wl,-rpath,/usr/local/lib
  2. Помогите пожалуйста подружить python с opencv on MacOSLeopard, opencv собрал ( cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON), import cv не работает, может еще пути какие-то нужно указать.
    Спасибо!

  3. Добрый день.
    Читаю ваш блог и параллельно знакомлюсь Qt.
    Хотел бы поделиться, что для запуска программ в Qt необходим следующий файл проекта (name.pro), вместо Makefile описанного выше:

    TEMPLATE = app
    TARGET =
    DEPENDPATH += /usr/local/lib
    INCLUDEPATH += /usr/local/include/opencv

    LIBS += -lopencv_core
    LIBS += -lopencv_imgproc
    LIBS += -lopencv_highgui

    # Input
    SOURCES += main.cpp

    П.С. Огромное спасибо за блог!

  4. Тестовая программа с ошибкой.
    В исходнике чтение производится из файла Image0.jpg, а не из параметра командной строки. Надо скоректировать либо исходник либо описание к нему и скриншот.

    И ещё один момент в Linux для названия исполняемого файла «test» лучше не использовать. Такая программа уже есть и она стандартная. Но это мелочи конечно.

  5. При установке на Ubuntu 11.04 Natty Narval появляется ошибка

    ../../lib/libopencv_highgui.so.2.2.0: undefined reference to `cvCreateCameraCapture_V4L(int)'

    Вот найденное решение:
    1. Заходим в папку OpenCV-2.2.0/modules/highgui/src
    2. В файле cap.cpp
    заменяем строчку 174

    #if defined (HAVE_CAMV4L) || defined (HAVE_CAMV4L2)

    на

    #if defined (HAVE_CAMV4L) 

    3. В файле cap_v4l.cpp
    заменяем строчку 217

    #include <linux/videodev.h>

    на

    #ifdef HAVE_CAMV4L 
    #include <linux/videodev.h> 
    #endif 
    

    Пруфлинк

    4. Пересобираем.

    • Вот блин! Теперь не работает камера! Что-то всё не так на 11.04…

      test: test.cpp:10: int main(int, char**): Assertion `capture' failed.
      Аварийный останов
      
    • Здрасти все!
      У меня fedora 15 и я имел схожие проблемы:

      1) error: ‘ptrdiff_t’ does not name a type
      Решение нашел в сети:
      добавить

      using std::ptrdiff_t;

      в

      OpenCV-2.2.0/include/opencv/cxcore.hpp

      2) Отсутствует linux/videodev.h
      Решение, которое помогло мне:
      а) Установить libv4l libv4l-devel

      yum install libv4l libv4l-devel;

      б) Сделать симлинк

      ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h

      ну или в файле cap_v4l.cpp строчку

      #include <linux/videodev.h>

      заменить на

      #include <libv4l1-videodev.h>

      ps: для других дистрибутивов думаю будет аналогично.

    • Нашлась и для второй проблемы нашлась ссылочка
      В ней:

      linux/videodev.h is now in libv4l1-videodev.h in «ubuntu 11.04» change this #include in «opencv/modules/highgui/src/cap_libv4l.cpp»

  6. Помогите пожалуйста подружить python с opencv on MacOSLeopard, opencv собрал ( cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON), import cv не работает, может еще пути какие-то нужно указать.
    Спасибо!

    +PS: экспортнул PYTHONPATH="/usr/local/lib/python2.7/site-packages/:$PYTHONPATH", но увы выдает обшибку ->

    >>> import cv
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/site-packages/cv.py", line 1, in <module>
        from cv2.cv import *
    ImportError: dlopen(/usr/local/lib/python2.7/site-packages/cv2.so, 2): no suitable image found.  Did find:
    	/usr/local/lib/python2.7/site-packages/cv2.so: mach-o, but wrong architecture

    Подскажите как быть?!

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение