2013-04-29 6 views
11

Ich bin ein Anfänger bei OpenCV und versuche mein Bestes, um eine einfache Anwendung zu erhalten, die auf einer eingebetteten Plattform läuft. Ich kompilierte OpenCV 2.4.4 und baute es WITH_GTK = ON, WITH_UNICAP = ON, WITH_V4L = ON, wie für die Kamera und GUI-Unterstützung benötigt. Der folgende Code kompiliert Quer auf host:Runtime Opencv HighGui Fehler- "HIGHGUI FEHLER: V4L/V4L2: VIDIOC_S_CROP". Opencv-Kreuz kompiliert. Host = 64 Bit Ubuntu 12.04. Ziel = 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; 
} 

Kompilieren auf diese Weise für statisches Linken:

Arm-Linux-gnueabi-g ++ = -mcpu cortex-a9 -mfpu = Neon -static opencv_camshow.cpp -o exe -I/home/om/OpenCV-2.4.4/plattformen/linux/build_soft/install/include -L/home/om/OpenCV-2.4.4/plattformen/linux/build_soft/install/lib -L/home/om/OpenCV-2.4.4/plattformen/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

Hier ist das Problem. Wenn ich versuche, die ausführbare Datei 'exe' auf dem Ziel zu laufen, bekomme ich diese Laufzeitfehler:

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV. Fehler: Unbekannter Fehler (Die Funktion ist nicht implementiert Rebuild die Bibliothek mit Windows-, GTK + 2.x- oder Carbon-Unterstützung Wenn Sie unter Ubuntu oder Debian sind, installieren Sie libgtk2.0-dev und pkg-config, führen Sie dann cmake oder configure script erneut aus) in cvNamedWindow, file/home/om/OpenCV -2.4.4/modules/highgui/src/window.cpp, Linie 652

terminate nach dem werfen einer Instanz von 'cv :: Exception' genannt

was(): /home/om/OpenCV-2.4 .4/modu les/highgui/src/window.cpp: 652: Fehler: (-2) Die Funktion ist nicht implementiert. Erstellen Sie die Bibliothek mit Windows-, GTK + 2.x- oder Carbon-Unterstützung neu. Wenn Sie auf Ubuntu oder Debian sind, libgtk2.0-dev und pkg-config, dann erneut ausführen cmake oder konfigurieren Skript in Funktion cvNamedWindow

ich neu installiert libgtk2.0-dev, pkg-config installieren existiert & neu kompiliert OpenCV, aber das hat nicht geholfen. Bitte lassen Sie mich wissen, wenn jemand weiß, wie er dieses Problem lösen kann. Danke im Voraus. ~ Om

Weitere Informationen: ich herausgefunden, was dieses Problem verursacht, aber noch nicht festgelegt ...

Von meinem Verständnis des Problem in der Cmake Skripte von opencv liegt. Es erkennt die Existenz von GTK nicht an und kompiliert daher ohne GTK-Unterstützung. Dies nachdem sichergestellt wurde, dass die arm-basierte gtk-Bibliothek im lib-Ordner der Toolchain vorhanden ist und ihr Pfad in Systempfade exportiert wird.

+0

Vielleicht, [die] (http://stackoverflow.com/questions/14655969/opencv-error-the-function-is- nicht implementiert) könnte Ihnen helfen? –

+0

Danke Etienne für Ihre Antwort. In meinem Fall versuche ich Cross-Compiling und ich habe alle Bibliotheken in der Toolchain. Auch die Pfade werden ordnungsgemäß exportiert. Ich habe das Problem aktualisiert, da der CMake an erster Stelle nicht in der Lage ist, gtk zu lokalisieren und daher Compiles ohne GTK-Unterstützung zu kompilieren. Ich versuche das zu beheben. – om9

+1

Wenn 'ldd' auf dem Ziel verfügbar ist, überprüfen Sie, nach welchen Bibliotheken die ausführbare Datei sucht. –

Antwort

2

Um kompilieren zu können, müssen Sie pkg-config mitteilen, dass der richtige Pfad gesucht wird (standardmäßig werden dies Ihre Host-Konfigurationsdateien/.pc-Dateien sein!).

)

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

Nur um klar zu sein . Ich muss lib-Dateien (z. B. libgdk-x11-2.0.so.0) von ARM-Linux auf x86-Linux übertragen und den PKG_CONFIG_PATH auf x86 so einstellen, dass er auf diesen Pfad verweist? – Gossamer

+0

Normalerweise kompiliert man das ganze buildroot auf einmal (es sei denn, man weiß, dass die libs mit einem kompatiblen Compiler kompiliert wurden - böse Dinge können passieren, wenn man zB gcc-3.3 gemischt mit gcc-4.x benutzt) – drahnr

10

überprüfen cmake Anweisung Nachdem ich, ob die Ausgabe von cmake den folgenden Text enthält: V4L/V4L2: Using libv4l.

Wenn es nicht dort ist, dann installieren Sie v4l2ucp, v4l-utils und libv4l-dev von synaptic Paket-Manager. Dann cmake und neu bauen.

Das ist für mich gearbeitet, aber ich wurde mit OpenCV mit Python-Bindungen auf Ubuntu 12.04.

0

OpenCV highgui Fehler

Haben opencv neu zu installieren cmake mit

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