2013-04-29 20 views
11

Jestem początkujący w OpenCV i staram się jak najlepiej uzyskać prostą aplikację działającą na platformie embedded. Skompilowałem krzyżowo OpenCV 2.4.4 i zbudowałem go WITH_GTK = ON, WITH_UNICAP = ON, WITH_V4L = ON w razie potrzeby dla obsługi kamery i GUI. Następujący kod próbki przekroju kompiluje się na gospodarzu:Runtime Błąd OpenCv HighGui - "HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP". Opracowano krzyż Opencv. Host = 64-bitowy system Ubuntu 12.04. Cel = ARM-Cortex-A9

#include <opencv/cv.h> 
#include <opencv/highgui.h> 
using namespace cv; 
int main(int, char**) 
{ 
    VideoCapture cap(0); // open the default camera 
    if (!cap.isOpened()) // check if we succeeded 
     return -1; 

    Mat edges; 
    namedWindow("edges", 1); 
    for (;;) { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if (waitKey(30) >= 0) 
      break; 
    } 
    return 0; 
} 

Kompilacja ten sposób dla łączenia statycznego:

ramię Linux-gnueabi-g ++ -mcpu = Cortex-A9 -mfpu = neon -static opencv_camshow.cpp -o exe -I/home/om/OpenCV-2.4.4/platforms/linux/build_soft/install/include -L/home/om/OpenCV-2.4.4/platforms/linux/build_soft/install/lib -L/home/om/OpenCV-2.4.4/platforms/linux/build_soft/3rdparty/lib -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_imgproc -lopencv_core -lopencv_contrib -lopencv_highgui -lopencv_ml -lopencv_video -lopencv _flann -lopencv_photo -lopencv_videostab -pthread -lm -lrt -lzlib -static

Oto problem. Kiedy próbuję uruchomić plik wykonywalny „exe” na tarczy, otrzymuję ten błąd wykonania:

HIGHGUI błąd: V4L/v4l2: VIDIOC_S_CROP OpenCV błędzie. Nieokreślony błąd (Funkcja nie jest realizowany Odbuduj biblioteka z obsługą Windows, GTK + 2.x lub Carbon Jeśli jesteś na Ubuntu lub Debian, zainstaluj libgtk2.0-dev i pkg-config, następnie uruchom ponownie cmake lub skonfiguruj skrypt) w cvNamedWindow, file/home/om/OpenCV -2.4.4/moduły/highgui/src/window.cpp, linia 652

terminate nazywany po wrzuceniu wystąpienie 'cv :: Exception'

co(): /home/om/OpenCV-2.4 .4/modu les/highgui/src/window.cpp: 652: error: (-2) Funkcja nie jest zaimplementowana. Przebuduj bibliotekę przy pomocy Windows, GTK + 2.x lub Carbon. Jeśli jesteś na Ubuntu i Debianie zainstalować libgtk2.0-dev i pkg-config, a następnie ponownie uruchomić CMake lub skonfigurować skrypt w funkcji cvNamedWindow

I ponownie zainstalowany libgtk2.0-dev, pkg-config istnieje & ponownie skompilowany OpenCV, ale to nie pomogło. Daj mi znać, jeśli ktoś wie, jak rozwiązać ten problem. Z góry dziękuję. ~ Om

Więcej informacji: zorientowali się, co jest przyczyną tego problemu, ale jeszcze nie naprawił ...

Z mojego zrozumienia problem leży w skryptach CUpewnij z OpenCV. Nie uznaje istnienia GTK, a zatem krzyżuje kompilacje bez obsługi gtk. To po upewnieniu się, że biblioteka GTK z ramieniem jest obecna w folderze lib biblioteki narzędziowej, a jej ścieżka jest eksportowana do ścieżek systemowych.

+0

Może [że] (http://stackoverflow.com/questions/14655969/opencv-error-the-function-is- niezaimplementowany) może ci pomóc? –

+0

Dzięki Etienne za odpowiedź. W moim przypadku próbuję krzyżować kompilację i mam wszystkie biblioteki w toolchain. Ścieżki są również poprawnie eksportowane. Zaktualizowałem ten problem, ponieważ cmake na pierwszym miejscu nie jest w stanie zlokalizować gtk, a zatem krzyżuje kompilacje bez obsługi GTK. Próbuję to naprawić. – om9

+1

Jeśli '' ldd' jest dostępny dla celu, sprawdź, jakich bibliotek szuka plik wykonywalny. –

Odpowiedz

2

Aby przejść przez kompilację, musisz powiedzieć pkg-config, aby szukała właściwej ścieżki (domyślnie będą to pliki konfiguracyjne twojego hosta/.pc!)

From pkg-config website

  • searching directories listed in $PKG_CONFIG_PATH
  • when $PKG_CONFIG_LIBDIR is specified, it will override the compiled in default directory (e.g. /usr/lib/pkgconfig) and the PKG_CONFIG_PATH. Note that when specifying PKG_CONFIG_LIBDIR, pkg-config will completely ignore the content in PKG_CONFIG_PATH, even if the documentation states different things.
+0

Tylko dla jasności . Potrzebuję przenieść pliki lib (np. Libgdk-x11-2.0.so.0) z ARM linux na x86 linux i ustawić PKG_CONFIG_PATH na x86, aby wskazać tę ścieżkę? – Gossamer

+0

Zwykle przekompilowujesz cały buildroot naraz (chyba że wiesz, że biblioteki zostały skompilowane z kompatybilnym kompilatorem - nieprzyjemne rzeczy mogą się zdarzyć podczas używania np. Gcc-3.3 zmieszanego z gcc-4.x) – drahnr

10

Po wykonaniu instrukcji cmake Sprawdź, czy wyjście cmake zawiera następujący tekst: V4L/V4L2: Using libv4l. Jeśli nie istnieje, zainstaluj v4l2ucp, v4l-utils i libv4l-dev z menedżera pakietów synaptic. Następnie cmake i ponownie zbuduj.

To działało dla mnie, ale używałem OpenCV z powiązaniami Pythona w systemie Ubuntu 12.04.

0

OpenCV highgui błąd

Czy ponowna instalacja OpenCV użyciu cmake

git clone https://github.com/Itseez/opencv.git 
cd ~/opencv 
mkdir release 
cd release 
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_IPP=OFF .. 
make -j4 sudo 
make install 
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages