Нашел в нете мануал как собрать OpenCV для arm с помощью cmake-gui.
При сборке ругнулось на fsbl(), вроде больше не было проблем.
Сборка и установка прошли успешно, но при попытке скомпилить обычный пример выводит кучу ошибок, где на каждый *.hpp файл в папке opencv/include ругается чуть ли не на каждую строчку, например:
/usr/local/include/opencv2/core/core.hpp:80: error: template declaration of 'cv::CV_EXPORTS cv::Size_'
/usr/local/include/opencv2/core/core.hpp:81: error: template declaration of 'cv::CV_EXPORTS cv::Point_'
/usr/local/include/opencv2/core/core.hpp:82: error: template declaration of 'cv::CV_EXPORTS cv::Rect_'
/usr/local/include/opencv2/core/core.hpp:83: error: template declaration of 'cv::CV_EXPORTS cv::Vec'
/usr/local/include/opencv2/core/core.hpp:84: error: template declaration of 'cv::CV_EXPORTS cv::Matx'
/usr/local/include/opencv2/core/core.hpp:93: error: aggregate 'cv::CV_EXPORTS cv::MatExpr' has incomplete type and cannot be defined
/usr/local/include/opencv2/core/core.hpp:94: error: aggregate 'cv::CV_EXPORTS cv::MatOp_Base' has incomplete type and cannot be defined
/usr/local/include/opencv2/core/core.hpp:95: error: aggregate 'cv::CV_EXPORTS cv::MatArg' has incomplete type and cannot be defined
/usr/local/include/opencv2/core/core.hpp:96: error: aggregate 'cv::CV_EXPORTS cv::MatConstIterator' has incomplete type and cannot be defined
/usr/local/include/opencv2/core/core.hpp:98: error: template declaration of 'cv::CV_EXPORTS cv::Mat_'
/usr/local/include/opencv2/core/core.hpp:99: error: template declaration of 'cv::CV_EXPORTS cv::MatIterator_'
/usr/local/include/opencv2/core/core.hpp:100: error: template declaration of 'cv::CV_EXPORTS cv::MatConstIterator_'
/usr/local/include/opencv2/core/core.hpp:101: error: template declaration of 'cv::CV_EXPORTS cv::MatCommaInitializer_'
/usr/local/include/opencv2/core/core.hpp:103: error: expected initializer before 'fromUtf16'
/usr/local/include/opencv2/core/core.hpp:104: error: expected initializer before 'toUtf16'
/usr/local/include/opencv2/core/core.hpp:106: error: expected initializer before 'format'
/usr/local/include/opencv2/core/core.hpp:107: error: expected initializer before 'tempfile'
/usr/local/include/opencv2/core/core.hpp:122: error: function definition does not declare parameters
/usr/local/include/opencv2/core/core.hpp:161: error: expected ',' or '...' before '&' token
/usr/local/include/opencv2/imgproc/imgproc.hpp:599: error: two or more data types in declaration of 'threshold'
ошибок крайне много, выкладывать нет смысла :D
Под собранную обычным путем opencv в ubuntu тестовая прога компилится, а для arm никак.
Makefile:
CC := /home/lunixoid/Wark/cross-gcc/arm-2007q1/bin/arm-none-linux-gnueabi-g++
CFLAGS := -I /usr/local/include/opencv2 -L /usr/local/lib
OBJECTS :=
LIBRARIES := -lopencv_core -lopencv_imgproc -lopencv_highgui
all: test
test:
$(CC) $(CFLAGS) -o test test.cpp $(LIBRARIES)
clean:
rm -f *.o
В проге просто пытаюсь подключить core/core.hpp imgproc.hpp highgui.hpp
Может неправильно собрал OpenCV или может зря вышел за пределы образа debian виртуалки? :D
Изврат, извратом, а собрать своими руками Opencv 2.3 для ARM удалось, проекты компилятся и успешно запускаются на плате. Для экономии места, на плату скопировал только либы.
Новый опыт в копилку :)
потом в этот тред заглянут другие пользователи в надежде найти решение этих грабель и шиш.. для них решения нет..
"загоняется" на плату кита любым доступным способом:
- запустить процедуру апдейта рутовой из юбут (при наличии там правильных команд)
- рутовая архивируется и распаковывается на место будущей рутовой или на накопитель с которого планируется грузить рутовую
- к хосту подмонтируется накопитель (usb-flash, sd) и на нее копируется прямо с хоста..
читайте форум - там есть ответы.. :/
Тоже об этом подумал :)
Решилось это тем, что при компиляции программы нужно указывать путь не до /usr/local/include/opencv2, а только до /usr/local/include/ ,не нужно было указывать в какой папке лежат либы, ну и просто их указать, т.е. новый Makefile выглядит так:
Makefile:
CC := /home/lunixoid/Wark/cross-gcc/arm-2007q1/bin/arm-none-linux-gnueabi-g++
CFLAGS := -I /usr/local/include
OBJECTS :=
LIBRARIES := -lopencv_core -lopencv_imgproc -lopencv_highgui
all: test
test:
$(CC) $(CFLAGS) -o test test.cpp $(LIBRARIES)
clean:
rm -f *.o
Если начент ругаться, что какие-либо функции undefined reference,т.е. не известны и которые не входят в opencv, нужно просто добавить либу, содержащую эту функцию. У меня это было -lpthread
Сейчас другая проблема. Ядро собрано с поддержкой uvc (сконфигурировал в menuconfig), загрузил по tftp, при старте появляются /dev/video0 и /dev/video1. В opencv получать с камеры изображение просто:
CvCapture* capture = cvCreateCameraCapture(0);
Но в capture все время NULL, т.е. камеру не находит. Точную модель камеры сказать не могу, но она точно поддерживает uvc, под убунтой этот же код получает картинку с камеры и сохраняет в файл.