ERSPProgramOpenCV

From ImageWiki

Revision as of 21:46, 3 April 2006 by Hauberg (Talk | contribs)
Jump to: navigation, search

ERSP og OpenCV

OpenCV er et kraftigt billedbehandlings- og datamatsynsbibliotek der udvikles af Intel. Da det er frit programmel er det desuden let tilgængeligt og gratis. Hvis du vil benytte OpenCV kan du bruge mit lille konverteringsprogram, der kan findes i SVN (kig efter filen ersp2opencv.hpp). Der er blot tale om en header-fil, som stiller funktionenerne

  IplImage* Image2Ipl(const Evolution::Image &I)
  IplImage* Image2Ipl(const Evolution::Image *I)
      Konverterer et Evolution::Image til et IplImage

  Evolution::Image* Ipl2Image(const IplImage *ipl)
      Gør det modsatte...

  IplImage* get_ipl(Evolution::ICamera *camera)
      Tager et IplImage udfra et Evolution::ICamera handle.

  void show(const char *window, const Evolution::Image &I)
  void show(const char *window, const Evolution::Image *I)
      Viser et Evolution::Image vha OpenCV's visualiseringssystem. Fungerer som cvShowImage.

til rådighed. Tag et billede med ERSP og konverter det til et IplImage (som er OpenCV's billeddatastruktur), som følger

  const Evolution::Image* img = NULL;
  camera->get_image (0, &img);
  IplImage *ipl = Image2Ipl(*img);

Du skal være opmærksom på at dette opretter et nyt billede, som du selvfølgelig skal deallokere med cvReleaseImage(). Derudover skal du naturligvis også deallokere ERSP billedet som du plejer.

Pakken der henvises til ovenfor indeholder et lille eksempelprogram der blot viser et billede vha. OpenCV. Du oversætter programmet som du plejer at oversætte ERSP programmer. Dog skal du tilføje lidt til din Makefile. Til CFLAGS skal du tilføje `pkg-config --cflags opencv` og til LDFLAGS `pkg-config --libs opencv`.

Har du problemer, så bare kontakt mig (Hauberg) da jeg er intereseret i at få dette afprøvet.

Bemærkninger

For det første er det værd at bemærke at dette program ikke ligefrem er effektivt. Data kopieres pixel for pixel, hvilket er langt fra optimalt. Problemet er at ERSP repræsenterer et billede i YUV farvekoordinater mens OpenCV typisk benytter RGB. Det er dog muligt at man kan lave noget smart - sig til hvis du kommer p ånoget.

Desuden skal der gøres opmærksom på at funktionen selvfølgelig skal implementeres i en .cpp fil og ikke en .hpp fil, men dovenskaben er en smuk diktator.

Jeg (Hauberg) har lige opdaget en fejl i ovenstående. Hvis du bruger OpenCV til at vise billeder skal du benytte cvWaitKey(...) fremfor Platform::milisecond_sleep(...).

Pokkers til uchar

OpenCV definerer typen uchar og ERSP definerer typen Evolution::uchar. Dvs. hvis du 'using namespace Evolution;' kan der opstå problemer. Da jeg er en skodprogrammør ville det være fedt hvis nogen kunne sige hvad (og evt. hvorfor) man skal gøre ved dette. Min løsning er at ignorere problemet og krydse fingrene.

Personal tools