OpenCV

From ImageWiki

(Difference between revisions)
Jump to: navigation, search
m
Line 1: Line 1:
-
Denne side giver en introduktion til OpenCV, som er et kraftigt bibliotek til billedbehandling og Computer Vision udviklet i C. OpenCV's hjemmeside kan ses [http://www.intel.com/technology/computing/opencv/index.htm her]. Projektet har desuden en god [http://opencvlibrary.sourceforge.net/ wiki].
+
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 [http://www.intel.com/technology/computing/opencv/index.htm her]. Projektet har desuden en god [http://opencvlibrary.sourceforge.net/ wiki].
-
det hele noget uoverskueligt. Man skal derfor vide hvad man leder efter -- men bare rolig, det man med tiden.
+
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 ==
== Strukturen af OpenCV ==
-
OpenCV af tre dele
+
OpenCV best?r af tre dele
-
* '''cxcore''' stiller diverse basale strukturer til
+
* '''cxcore''' stiller diverse basale strukturer til r?dighed
-
* '''cv''' indeholder funktioner til billedbehandling, Computer Vision og
+
* '''cv''' indeholder funktioner til billedbehandling, Computer Vision og m?nstergenkendelse
-
* '''highgui''' indeholder funktioner til opbygning af simple grafiske og til af billeder. Dvs. at '''highgui''' bruges til at hente billeder (fra kamera og filer) og derefter vise dem.
+
* '''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.
-
En af OpenCV's styrker er at det er let at benytte. Hver af de tre dele af OpenCV stiller en header-fil til der blot skal inkluderes i dit C/C++ program. Dvs. tre header-filer er interessante: "cxcore.h", "cv.h" og "highgui.h".
+
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 programmer der benytter OpenCV, benyttes programmet ''pkg-config''. Dette program blot hvilke argumenter der skal gives til for at OpenCV kan benyttes. Kommandoen
+
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
  pkg-config --cflags opencv
-
udskriver de argumenter der skal gives til for at den kan finde OpenCV, mens kommandoen
+
udskriver de argumenter der skal gives til overs?tteren for at den kan finde OpenCV, mens kommandoen
  pkg-config --libs opencv
  pkg-config --libs opencv
-
udskriver de argumenter der skal gives til for at den kan linke til OpenCV. Dette
+
udskriver de argumenter der skal gives til overs?tteren for at den kan linke til OpenCV. Dette g?r
  # Compile and link flags
  # Compile and link flags
-
  CXX      =  g++
+
  CXX      =  g
  CXXFLAGS = `pkg-config opencv --cflags` -Wall
  CXXFLAGS = `pkg-config opencv --cflags` -Wall
  LIBS    = `pkg-config opencv --libs`
  LIBS    = `pkg-config opencv --libs`
Line 39: Line 39:
== Eksempel 1 ==
== Eksempel 1 ==
-
Det af filen ''eksempel1.cc'' og en ''Makefile''.
+
Det f?rste best?r af filen ''eksempel1.cc'' og en tilh?rende ''Makefile''.
  #include "highgui.h"
  #include "highgui.h"
Line 60: Line 60:
     // Clean up
     // Clean up
     cvDestroyAllWindows();
     cvDestroyAllWindows();
-
     cvReleaseCapture(&cam);
+
     cvReleaseCapture(
-
+
-
    return 0;
+
-
}
+
-
 
+
-
+
-
# Compile and link flags
+
-
CXX      =  g++
+
-
CXXFLAGS = `pkg-config opencv --cflags` -Wall
+
-
LIBS    = `pkg-config opencv --libs`
+
-
+
-
# Name of executable
+
-
EXECUTABLE = eksempel1
+
-
+
-
# Files
+
-
SOURCES = eksempel1.cc
+
-
OBJECTS = $(patsubst %.cc, %.o, $(SOURCES))
+
-
+
-
# Linking
+
-
all: $(OBJECTS)
+
-
$(CXX) $(LIBS) $(OBJECTS) -o $(EXECUTABLE)
+
-
+
-
# Compilation
+
-
%.o : %.cc
+
-
$(CXX) $(CXXFLAGS) -c $^
+
-
 
+
-
+
-
 
+
-
== Eksempel 2 ==
+
-
+
-
+
-
Som tidligere kan koden findes i Robot Eksperimentariums [[Robot_Eksperimentarium_2006#The_SVN_Repository|SVN]] under ''Examples/opencv/Eksempel2''.
+
-
 
+
-
#include "cxcore.h"
+
-
#include "cv.h"
+
-
#include "highgui.h"
+
-
+
-
int main()
+
-
{
+
-
    // Get an OpenCV camera handle
+
-
    CvCapture *cam = cvCaptureFromCAM(-1);
+
-
+
-
    // Initialise the GUI
+
-
    const char *window = "Eksempel 2";
+
-
    cvNamedWindow(window, CV_WINDOW_AUTOSIZE);
+
-
+
-
    // Allocate an 640x480 gray scale image for the gray scale image and
+
-
    // the edge image.
+
-
    // This assumes that the camera returns 640x480 images.
+
-
    const CvSize size = cvSize(640, 480);
+
-
    IplImage *gray  = cvCreateImage(size, IPL_DEPTH_8U, 1);
+
-
    IplImage *edges = cvCreateImage(size, IPL_DEPTH_8U, 1);
+
-
+
-
    // The main loop
+
-
    while (cvWaitKey(4) == -1) {
+
-
        IplImage *im = cvQueryFrame(cam);
+
-
        cvCvtColor(im, gray, CV_BGR2GRAY); // Convert color image to gray scale
+
-
        cvCanny(gray, edges, 1000, 750, 5); // Find edges
+
-
        cvShowImage(window, edges);
+
-
    }
+
-
    cvSaveImage("edges.png", edges); // Save the last edge image
+
-
+
-
    // Clean up
+
-
    cvDestroyAllWindows();
+
-
    cvReleaseCapture(&cam);
+
-
    cvReleaseImage(&gray);
+
-
    cvReleaseImage(&edges);
+
-
+
-
    return 0;
+
-
}
+
-
+
-
 
+
-
== Tips og tricks ==
+
-
+
-
 
+
-
=== BGR? ===
+
-
+
-
 
+
-
=== Tilgang til pixels ===
+
-
+
-
#define GRAY(IMAGE, X, Y) \
+
-
    ((uchar*)((IMAGE)->imageData  + (IMAGE)->widthStep*(Y)))[X]
+
-
#define RED(IMAGE, X, Y) \
+
-
    ((uchar*)((IMAGE)->imageData + (IMAGE)->widthStep*(Y)))[(X)*3+2]
+
-
#define GREEN(IMAGE, X, Y) \
+
-
    ((uchar*)((IMAGE)->imageData + (IMAGE)->widthStep*(Y)))[(X)*3+1]
+
-
#define BLUE(IMAGE, X, Y) \
+
-
    ((uchar*)((IMAGE)->imageData + (IMAGE)->widthStep*(Y)))[(X)*3]
+
-
+
-
+
-
int tmp = GRAY(I, x, y);
+
-
GRAY(I, x, y) = tmp + 1;
+
-
+
-
+
-
int red = RED(BGR, x, y);
+
-
BLUE(BGR, x, y) = red;
+
-
+
-
 
+
-
== Propaganda ==
+
-
+
-
 
+
-
== Introduktion til OpenCV==
+
-
+
-
http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html
+

Revision as of 17:49, 17 April 2007

Personal tools