OpenCV

From ImageWiki

Revision as of 14:13, 6 September 2007 by Kimstp (Talk | contribs)
Jump to: navigation, search

Denne side giver en bl?d introduktion til OpenCV, som er et kraftigt bibliotek til billedbehandling og Computer Vision udviklet i C. OpenCV's hjemmeside kan ses her. Projektet har desuden en god wiki.

Generelt er OpenCV yderst veldokumenteret, s� denne side giver kun et par simple eksempler p� anvendelse. Et problem ved OpenCV's dokumentation er dog at der er s� meget af den, hvilket kan g?re det hele noget uoverskueligt. Man skal derfor vide hvad man leder efter -- men bare rolig, det l?rer man med tiden.

Strukturen af OpenCV

OpenCV består af tre dele

  • cxcore stiller diverse basale strukturer til rådighed. Dette inkluderer strukturer til billeder, matricer, punkter, o.lign. Desuden indeholder cxcore basale grafiske funktioner, såsom tegning af linier, cirkler, firkanter, osv.
  • cv indeholder funktioner til billedbehandling, Computer Vision og mønstergenkendelse. Det vil sige funktioner til kantdetektion, kamerakalibrering, beregning af motion flow, klyngeanalyse og så videre.
  • highgui indeholder funktioner til opbygning af simple grafiske brugergrænseflader og til indlæsning af billeder. Dvs. at highgui primært bruges til at hente billeder (fra kamera og filer) og derefter vise dem.

Hvordan benyttes OpenCV p� Linux?

En af OpenCV's styrker er at det er let at benytte. Hver af de tre dele af OpenCV stiller en header-fil til r?dighed der blot skal inkluderes i dit C/C program. Dvs. f?lgende tre header-filer er interessante: "cxcore.h", "cv.h" og "highgui.h".

For at overs?tte programmer der benytter OpenCV, benyttes programmet pkg-config. Dette program fort?ller blot hvilke argumenter der skal gives til overs?tteren for at OpenCV kan benyttes. Kommandoen

pkg-config --cflags opencv

udskriver de argumenter der skal gives til overs?tteren for at den kan finde OpenCV, mens kommandoen

pkg-config --libs opencv

udskriver de argumenter der skal gives til overs?tteren for at den kan linke til OpenCV. Dette g?r det yderst nemt at skrive en passende Makefile. Her gives et mindre eksempel, som du selv m� tilpasse til dit eget projekt.

# Compile and link flags
CXX      =  g  
CXXFLAGS = `pkg-config opencv --cflags` -Wall
LIBS     = `pkg-config opencv --libs`

# Name of executable
EXECUTABLE = myprogram

# Files
SOURCES = myprogram.cc myauxilaryfunction.cc
OBJECTS = $(patsubst %.cc, %.o, $(SOURCES))

# Linking
all: $(OBJECTS)
	$(CXX) $(LIBS) $(OBJECTS) -o $(EXECUTABLE)

# Compilation
%.o : %.cc
	$(CXX) $(CXXFLAGS) -c $^

Eksempel 1

Det f?rste eksempel vi ser p� tager billeder fra et kamera og viser dem i et vindue. Det er formentlig det mest simple og alligevel nyttige program der kan skrives i OpenCV. Programmet kan findes i Robot Eksperimentariums SVN under Examples/opencv/Eksempel1 og best?r af filen eksempel1.cc og en tilh?rende Makefile.

#include "highgui.h"

int main() 
{
    // Get an OpenCV camera handle
    CvCapture *cam = cvCaptureFromCAM(-1);

    // Initialise the GUI
    const char *window = "Eksempel 1";
    cvNamedWindow(window, CV_WINDOW_AUTOSIZE);

    // The main loop
    while (cvWaitKey(4) == -1) {
        IplImage *im = cvQueryFrame(cam);
        cvShowImage(window, im);
    }

    // Clean up
    cvDestroyAllWindows();
    cvReleaseCapture(
Personal tools