Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Настройка opencv  (Прочитано 3988 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Настройка opencv
« : 30 Января 2012, 22:55:02 »
Доброго времени суток. Начал изучать opencv, но столкнулся со следующей проблемой: собрав и установив из исходников opencv + доп библиотеки, решил попробовать свою первую программу(взял код с робокрафта). Сделал Makefile. Но при попытке скомпилировать выдает следующее:g++     opencv1.cpp   -o opencv1
opencv1.cpp:1:16: error: cv.h: Нет такого файла или каталога
opencv1.cpp:2:21: error: highgui.h: Нет такого файла или каталога
opencv1.cpp: In function ‘int main(int, char**)’:
opencv1.cpp:10: error: ‘CvPoint’ was not declared in this scope
opencv1.cpp:10: error: expected ‘;’ before ‘pt’
opencv1.cpp:12: error: ‘IplImage’ was not declared in this scope
opencv1.cpp:12: error: ‘hw’ was not declared in this scope
opencv1.cpp:12: error: ‘cvSize’ was not declared in this scope
opencv1.cpp:12: error: ‘cvCreateImage’ was not declared in this scope
opencv1.cpp:14: error: ‘cvScalar’ was not declared in this scope
opencv1.cpp:14: error: ‘cvSet’ was not declared in this scope
opencv1.cpp:16: error: ‘CvFont’ was not declared in this scope
opencv1.cpp:16: error: expected ‘;’ before ‘font’
opencv1.cpp:17: error: ‘font’ was not declared in this scope
opencv1.cpp:17: error: ‘CV_FONT_HERSHEY_COMPLEX’ was not declared in this scope
opencv1.cpp:17: error: ‘CV_AA’ was not declared in this scope
opencv1.cpp:17: error: ‘cvInitFont’ was not declared in this scope
opencv1.cpp:19: error: ‘pt’ was not declared in this scope
opencv1.cpp:19: error: ‘CV_RGB’ was not declared in this scope
opencv1.cpp:19: error: ‘cvPutText’ was not declared in this scope
opencv1.cpp:22: error: ‘cvNamedWindow’ was not declared in this scope
opencv1.cpp:24: error: ‘cvShowImage’ was not declared in this scope
opencv1.cpp:26: error: ‘cvWaitKey’ was not declared in this scope
opencv1.cpp:29: error: ‘cvReleaseImage’ was not declared in this scope
opencv1.cpp:30: error: ‘cvDestroyWindow’ was not declared in this scope
make: *** [opencv1] Ошибка 1
maxim@maxim-laptop:~/opencv$ clear

maxim@maxim-laptop:~/opencv$ make
g++     opencv1.cpp   -o opencv1
opencv1.cpp:1:16: error: cv.h: Нет такого файла или каталога
opencv1.cpp:2:21: error: highgui.h: Нет такого файла или каталога
opencv1.cpp: In function ‘int main(int, char**)’:
opencv1.cpp:10: error: ‘CvPoint’ was not declared in this scope
opencv1.cpp:10: error: expected ‘;’ before ‘pt’
opencv1.cpp:12: error: ‘IplImage’ was not declared in this scope
opencv1.cpp:12: error: ‘hw’ was not declared in this scope
opencv1.cpp:12: error: ‘cvSize’ was not declared in this scope
opencv1.cpp:12: error: ‘cvCreateImage’ was not declared in this scope
opencv1.cpp:14: error: ‘cvScalar’ was not declared in this scope
opencv1.cpp:14: error: ‘cvSet’ was not declared in this scope
opencv1.cpp:16: error: ‘CvFont’ was not declared in this scope
opencv1.cpp:16: error: expected ‘;’ before ‘font’
opencv1.cpp:17: error: ‘font’ was not declared in this scope
opencv1.cpp:17: error: ‘CV_FONT_HERSHEY_COMPLEX’ was not declared in this scope
opencv1.cpp:17: error: ‘CV_AA’ was not declared in this scope
opencv1.cpp:17: error: ‘cvInitFont’ was not declared in this scope
opencv1.cpp:19: error: ‘pt’ was not declared in this scope
opencv1.cpp:19: error: ‘CV_RGB’ was not declared in this scope
opencv1.cpp:19: error: ‘cvPutText’ was not declared in this scope
opencv1.cpp:22: error: ‘cvNamedWindow’ was not declared in this scope
opencv1.cpp:24: error: ‘cvShowImage’ was not declared in this scope
opencv1.cpp:26: error: ‘cvWaitKey’ was not declared in this scope
opencv1.cpp:29: error: ‘cvReleaseImage’ was not declared in this scope
opencv1.cpp:30: error: ‘cvDestroyWindow’ was not declared in this scope
make: *** [opencv1] Ошибка 1
Что может быть? Думал не прописаны пути к библиотекам, но прописав их вручную ситуация не изменилась.
P.S. Версия opencv - 2.3.1, ubuntu - 10.04.3.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Настройка opencv
« Ответ #1 : 31 Января 2012, 05:01:57 »
Ты читать умеешь?
opencv1.cpp:1:16: error: cv.h: Нет такого файла или каталога
opencv1.cpp:2:21: error: highgui.h: Нет такого файла или каталога
opencv1.cpp:1:16: error: cv.h: Нет такого файла или каталога
opencv1.cpp:2:21: error: highgui.h: Нет такого файла или каталога
и это еще цветочки, потом будут ягодки в виде не могу найти библиотеку
man gcc на предмет ключика -I и -L
раз ты собрал opencv из исходников. вспоминай куда ты установил opencv и указывай соответствующие каталоги в ключах -I и -L

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #2 : 31 Января 2012, 15:42:29 »
А вы читать умете?
Цитировать
Думал не прописаны пути к библиотекам, но прописав их вручную ситуация не изменилась.
Вот makefile:
CC := g++
CFLAGS := -I/usr/local/include/opencv -L/usr/local/lib -Wl,-rpath,/usr/local/lib
OBJECTS :=
LIBRARIES := -lopencv_core -lopencv_imgproc -lopencv_highgui

.PHONY: all clean

all: opencv1

test:
$(CC) $(CFLAGS) -o opencv1 opencv1.cpp $(LIBRARIES)
       
clean:
rm -f *.o
А вот непосредственно файл с кодом:
#include <cv.h>
#include <highgui.h>

int main( int argc, char** argv )
{
        // задаём высоту и ширину картинки
        int height = 620;
        int width = 440;
        // задаём точку для вывода текста
        CvPoint pt = cvPoint( height/4, width/2 );
        // Создаёи 8-битную, 3-канальную картинку
        IplImage* hw = cvCreateImage(cvSize(height, width), 8, 3);
        // заливаем картинку чёрным цветом
        cvSet(hw,cvScalar(0,0,0));
        // инициализация шрифта
        CvFont font;
        cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,1.0, 1.0, 0, 1, CV_AA);
        // используя шрифт выводим на картинку текст
        cvPutText(hw, "OpenCV Step By Step", pt, &font, CV_RGB(150, 0, 150) );

        // создаём окошко
        cvNamedWindow("Hello World", 0);
        // показываем картинку в созданном окне
        cvShowImage("Hello World", hw);
        // ждём нажатия клавиши
        cvWaitKey(0);
       
        // освобождаем ресурсы
        cvReleaseImage(&hw);
        cvDestroyWindow("Hello World");
        return 0;
}
P.s. файлы из каталога opencv/samples/cpp собирались и выполнялись на ура..

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Настройка opencv
« Ответ #3 : 31 Января 2012, 15:56:36 »
А хидеры вообще есть в /usr/local/include/opencv?

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #4 : 31 Января 2012, 16:23:34 »
Да, но там два каталога opencv..

maxim@maxim-laptop:~$ cd /usr/local/include/
maxim@maxim-laptop:/usr/local/include$ ls
opencv opencv2
maxim@maxim-laptop:/usr/local/include$ cd ./opencv
maxim@maxim-laptop:/usr/local/include/opencv$ ls
cvaux.h    cv.h    cvwimage.h  cxcore.hpp   cxmisc.h   ml.h
cvaux.hpp  cv.hpp  cxcore.h    cxeigen.hpp  highgui.h
maxim@maxim-laptop:/usr/local/include/opencv$ cd ..
maxim@maxim-laptop:/usr/local/include$ cd ./opencv2
maxim@maxim-laptop:/usr/local/include/opencv2$ ls
calib3d  core      flann  highgui  legacy  objdetect ts
contrib  features2d  gpu    imgproc  ml      opencv.hpp  video
maxim@maxim-laptop:/usr/local/include/opencv2$

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Настройка opencv
« Ответ #5 : 31 Января 2012, 17:16:10 »
Исходя из вот этой строки "g++     opencv1.cpp   -o opencv1" у тебя переменные CFLAGS и LIBRARIES пустые. Не помню, чтобы в Makefile присвоение выглядело как :=, всегда писал просто CFLAGS=-I/usr/include/bla-bla-bla

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #6 : 31 Января 2012, 17:25:03 »
ссылка на инструкцию и makefile http://robocraft.ru/blog/computervision/435.html

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Настройка opencv
« Ответ #7 : 31 Января 2012, 17:28:54 »
Попробуйте без make выполнить g++ -I/usr/local/include/opencv -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -o opencv1 opencv1.cpp

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #8 : 31 Января 2012, 17:32:14 »
Все получилось! Но почему же до этого не сработало?

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Настройка opencv
« Ответ #9 : 31 Января 2012, 17:44:03 »
Очевидно, Makefile написан неправильно.

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #10 : 31 Января 2012, 17:50:59 »
ок спасибо. Буду читать про написание makefile  ;)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Настройка opencv
« Ответ #11 : 01 Февраля 2012, 05:57:36 »
ок спасибо. Буду читать про написание makefile  ;)
поэтому и спросил. ты читать умеешь?
видимо не очень

Оффлайн maksim_r

  • Автор темы
  • Участник
  • *
  • Сообщений: 110
    • Просмотр профиля
Re: Настройка opencv
« Ответ #12 : 01 Февраля 2012, 18:59:16 »
Yurror, а у вас видимо плохо со зрением? Я же сказал, что пути прописал, и про "ключики" не забыл. А ошибка была наиглупейшая)

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

.PHONY: all clean

all: opencv1

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

+ я воспользовался советом hippi90, и сделал нормальное присваивание. В итоге получилось:
CC= g++
CFLAGS= -I/usr/local/include/opencv -L/usr/local/lib -Wl,-rpath,/usr/local/lib
OBJECTS =
LIBRARIES= -lopencv_core -lopencv_imgproc -lopencv_highgui

.PHONY: all clean

all: opencv1

opencv1:
$(CC) $(CFLAGS) -o opencv1 opencv1.cpp $(LIBRARIES)
       
clean:
rm -f *.o
Yurror, и только не надо писать: "выходит что у тебя плохо со зрением" :coolsmiley:
« Последнее редактирование: 01 Февраля 2012, 19:03:47 от maksim_r »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Настройка opencv
« Ответ #13 : 02 Февраля 2012, 05:07:07 »
ok, уговорил

1) CC=g++ это что за хренотень?? О_о
эта переменная определена автоматически и ссылается на доступный (или выставленный по умолчанию) компилятор языка Си
если сильно хочется переопределить компилятор для С++ надо писать CXX=g++ и то не рекомендуется. она тоже автоматически определена.

2) -L/usr/local/lib -Wl,-rpath,/usr/local/lib никаким боком не относятся к CFLAGS. к LDFLAGS относятся равно как и то что ты написал LIBRARIES

3) если у тебя исходники на С++ следовало определять не CFLAGS а CXXFLAGS и добавить туда -Wall -Wextra

4) в SOURCES следовало написать SOURCES=opencv1.cpp

5) в OBJECTS следовало написать OBJECTS=$(SOURCES:.cpp=.o)

6) цель opencv1 следовало бы написать как-то так
TARGET=opencv1

$(TARGET): $(OBJECTS)
$(CXX) $^ -o $< $(LDFLAGS)

7) очистка делается так
clean:
$(RM) $(TARGET) $(OBJECTS)

8 ) сборка каких-то библиотек из исходников иногда конечно оправдана, но ubuntu и так содержит этот пакет. который установится как надо и будет работать.
sudo apt-get install libcv-dev libcvaux-dev libhighgui-dev

9) жестко вшивать в Makefile пути по которым установлена библиотека тоже бяка для этого придумали механизм pkg-config, осваивай его

10) Со зрением все хорошо. Я не спорю. Просто умение читать документацию хромает. Так лучше объяснил?
Итоговый Makefile
Код: (Makefile) [Выделить]
CXXFLAGS=-Wall -Wextra $(shell pkg-config --cflags opencv)
LDFLAGS=$(shell pkg-config --libs opencv)
SOURCES=opencv1.cpp
OBJECTS=$(SOURCES:.cpp=.o)
TARGET=opencv1

$(TARGET): $(OBJECTS)
$(CXX) $^ -o $@ $(LDFLAGS)

clean:
$(RM) $(TARGET) $(OBJECTS)
есть еще масса всяких стандартных механизмов упрощающих жизнь, у меня например исходники жёстко вбиты. можно составлять список автоматически. имя главной цели можно брать из названия каталого в котором это всё добро расположено и т.д.

 

Страница сгенерирована за 0.039 секунд. Запросов: 25.