Das Infolexikon
...und Blog über die Uni FrankfurtInformatik und Kram
Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...
| OpenCV |
Wir suchen ja schon länger nach ner coolen Bildverarbeitungs-Lib, die uns erlaubt, ordentlich auf Webcam-Streams zu rechnen, speziell auf V4L2 Geräten. Wir haben bereits mit Vigra von Holger Friedrich sehr gute Erfahrungen gemacht, leider fehlt hier der V4L2-Support. Als nächstes war dann CImg dran, was auch ziemlich gute Funkionen zur Verfügung stellt, aber leider nur wieder mal so eine beschne Doxygen-Doku bereitstellt und kaum Tutorials zu finden sind.
Letztendlich bin ich dann aber bei OpenCV gelandet, was mich voll überzeugt hat. Ich brauchte ganze fünf Minuten, um Farbbilder von der Webcam einulesen und einen Sobel-Operator drauf anzuwenden, ausserdem ist das Wiki von denen super!
Letztendlich bin ich dann aber bei OpenCV gelandet, was mich voll überzeugt hat. Ich brauchte ganze fünf Minuten, um Farbbilder von der Webcam einulesen und einen Sobel-Operator drauf anzuwenden, ausserdem ist das Wiki von denen super!
Inhaltsverzeichnis
Download und Installieren
Downloaden OpenCV von sourceforge, dann wie gewohnt:$> tar xvzf opencv-1.1.tar.gz $> cd open-cv-1.1.0 $> ./configure $> make && make install
Erstes Programm compilen
Wenn ihr eine V4L2-Cam habt könnt ihr nun mit folgendem Code das erste einfache Programm speichern:
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if( !capture ) {
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}
// Zwei Fenster erstellen, eins für original-Bild, eins für Sobel
cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "extra", CV_WINDOW_AUTOSIZE );
while( 1 ) {
// Erstmal die "Container" füllen, hier mit dem CamBild
IplImage* image = cvQueryFrame( capture );
IplImage* frame = cvQueryFrame( capture );
if( !frame ) {
fprintf( stderr, "ERROR: frame is null...\n" );
getchar();
break;
}
cvShowImage( "mywindow", frame);
cvSobel(frame, image, 1, 1, 3);
cvShowImage( "extra", image);
//Wenn ESC gedrückt wird, Key=0x10001B
//mit OpenCV 0.9.7(linux version),
//hohe bits mit AND-Operator entfernen, Prog verlassen
if( (cvWaitKey(10) & 255) == 27 ) break;
}
// Release
cvReleaseCapture( &capture );
cvDestroyWindow( "mywindow" );
return 0;
}
g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` -o cam_capture main.cpp
Einfache Erkennung
Hier mal ne einfache Erkennung (rot-Verhältnis im Vergleich zu den anderen beiden Kanälen):
| Erstellt | 30. November 2008 14:04:00 | Geändert | 30. November 2008 17:57:45 |
|---|---|---|---|
| Von | Tobias Weis | Kategorien | Linux Robostuff |
| 1 Kommentar(e) | |||
Kommentare
Für alle, die verstanden haben, wofür es PKGBUILDs gibt, hier der Link ins AUR.