OpenCV

From ImageWiki

(Difference between revisions)
Jump to: navigation, search
(Eksempel 1)
(Eksempel 1)
Line 39: Line 39:
== Eksempel 1 ==
== 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 [[Robot_Eksperimentarium_2006#The_SVN_Repository|SVN]] under ''Examples/opencv/Eksempel1'' og består af filen ''eksempel1.cc'' og en tilh?rende ''Makefile''.
+
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 [[Robot_Eksperimentarium_2006#The_SVN_Repository|SVN]] under ''Examples/opencv/Eksempel1'' og består af filen ''eksempel1.cc'' og en tilhørende ''Makefile''.
  #include "highgui.h"
  #include "highgui.h"

Revision as of 14:17, 6 September 2007

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