ERSPProgramOpenCV

From ImageWiki

Revision as of 21:06, 17 June 2006 by Hauberg (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 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 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