2013-04-29 19 views
11

Sono un principiante in OpenCV e sto facendo del mio meglio per ottenere un'applicazione semplice in esecuzione su una piattaforma integrata. Ho compilato a croce OpenCV 2.4.4 e lo ho creato WITH_GTK = ON, WITH_UNICAP = ON, WITH_V4L = ON come necessario per il supporto della fotocamera e della GUI. Il seguente codice di esempio cross-compila sull'host:Errore Opencv HighGui di runtime- "HIGHGUI ERRORE: V4L/V4L2: VIDIOC_S_CROP". Opencv cross compilato. Host = 64bit Ubuntu 12.04. Target = 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; 
} 

compilazione in questo modo per il collegamento statico:

braccio-linux-gnueabi-g ++ -mcpu = Cortex-A9 -mfpu = neon -static opencv_camshow.cpp -o exe -I/home/om/OpenCV-2.4.4/piattaforme/linux/build_soft/install/include -L/home/om/OpenCV-2.4.4/piattaforme/linux/build_soft/install/lib -L/home/om/OpenCV-2.4.4/piattaforme/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

Ecco il problema. Quando provo ad eseguire il file eseguibile 'exe' sul bersaglio, ottengo questo errore di runtime:

HIGHGUI ERRORE: V4L/V4L2: VIDIOC_S_CROP OpenCV Errore:. Errore non specificato (La funzione non è implementata Ricostruire il libreria con supporto per Windows, GTK + 2.x o Carbon. Se sei su Ubuntu o Debian, installa libgtk2.0-dev e pkg-config, quindi esegui di nuovo cmake o configure script) in cvNamedWindow, file/home/om/OpenCV -2.4.4/modules/highgui/src/window.cpp, linea 652

terminare chiamato dopo il lancio un'istanza di 'cv :: eccezione'

quello(): /home/om/OpenCV-2.4 0,4/modu les/highgui/src/window.cpp: 652: errore: (-2) La funzione non è implementata. Ricrea la libreria con Windows, GTK + 2.x o Carbon support. Se siete su Ubuntu o Debian, installare libgtk2.0-dev e pkg-config, poi ri-eseguire cmake o configurare lo script in funzione cvNamedWindow

ho reinstallato libgtk2.0-dev, esiste pkg-config & ricompilati OpenCV, ma questo non ha aiutato. Per favore fatemi sapere se qualcuno sa come superare questo problema. Grazie in anticipo. ~ Om

Maggiori informazioni: ho capito che cosa sta causando questo problema, ma non è ancora stato risolto ...

Dalla mia comprensione del problema si trova negli script cmake di OpenCV. Non riconosce l'esistenza di GTK e quindi crosscompila senza supporto gtk. Questo dopo aver verificato che la libreria gtk basata su arm sia presente nella cartella lib della toolchain e il suo percorso esportato nei percorsi di sistema.

+0

Forse [che] (http://stackoverflow.com/questions/14655969/opencv-error-the-function-is- non implementato) potrebbe aiutarti? –

+0

Grazie Etienne per la tua risposta. Nel mio caso sto cercando di eseguire la compilazione e ho tutte le librerie nella toolchain. Anche i percorsi vengono esportati correttamente. Ho aggiornato il problema poiché il cmake al primo posto non è in grado di localizzare gtk e quindi crosscompiles senza il supporto GTK. Sto cercando di aggiustarlo. – om9

+1

Se 'ldd' è disponibile sulla destinazione, controllare quali librerie l'eseguibile sta cercando. –

risposta

2

Per eseguire la compilazione incrociata è necessario dire a pkg-config di cercare il percorso corretto (per impostazione predefinita saranno i file di configurazione/.pc dell'host!)

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

Giusto per essere chiari . Ho bisogno di trasferire i file lib (ad es. Libgdk-x11-2.0.so.0) da ARM linux a x86 linux e impostare PKG_CONFIG_PATH su x86 in modo che punti a quel percorso? – Gossamer

+0

In genere si esegue il crosscompile dell'intero buildroot in una sola volta (a meno che non si sappia che le librerie sono state compilate con un compilatore compatibile - possono accadere cose sgradevoli quando si utilizza gcc-3.3 miscelato con gcc-4.x) – drahnr

10

Dopo aver fatto la dichiarazione cmake Verificare se l'uscita del cmake comprende il testo seguente: V4L/V4L2: Using libv4l.

Se non è presente, installare v4l2ucp, v4l-utils e libv4l-dev dal gestore di pacchetti sinottici. Quindi cmake e ricostruisci.

Questo ha funzionato per me, ma stavo usando OpenCV con collegamenti Python su Ubuntu 12.04.

0

Opencv errore highgui

essere necessario reinstallare OpenCV usando 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