PBImage or ImageHandle To OpenCV *Image.IplImage

Just starting out? Need help? Post your questions and find answers here.
LiK137
Enthusiast
Enthusiast
Posts: 279
Joined: Wed Jun 23, 2010 5:13 pm

PBImage or ImageHandle To OpenCV *Image.IplImage

Post by LiK137 »

Hi,
Thanks to JHPJHP for posting OpenCV2PBImage_ASM
But is there reverse procedure for converting to OpenCV image?

Code: Select all

If pbimage
            UseJPEGImageEncoder()
            *buffer = EncodeImage(pbimage, #PB_ImagePlugin_JPEG)
            Define *mat.CvMat = cvCreateMatHeader(ImageHeight(pbimage), ImageWidth(pbimage), CV_MAKETYPE(#CV_32F, 1))
            cvSetData(*mat, *buffer, #CV_AUTOSTEP)
            Define *image.IplImage = cvDecodeImage(*mat, #CV_LOAD_IMAGE_COLOR)
            FreeMemory(*buffer)
            FreeImage(pbimage)
          EndIf
is unsuccessful
JHPJHP
Addict
Addict
Posts: 2129
Joined: Sat Oct 09, 2010 3:47 am
Contact:

Re: PBImage or ImageHandle To OpenCV *Image.IplImage

Post by JHPJHP »

Hi LiK137,

See the following examples:
- cv_pb_image_1.pb
- cv_pb_image_2.pb

Confirm that the PB image is valid and the Decoder is correct:

Code: Select all

;...
Pattern.s = "All Images (*.*)|*.bmp;*.dib;*.jpeg;*.jpg;*.jpe;*.jp2;*.png;*.pbm;*.pgm;*.ppm;*.sr;*.ras;*.tiff;*.tif" +
            "|Windows Bitmaps (*.bmp;*.dib)|*.bmp;*.dib|JPEG Files (*.jpeg;*.jpg;*.jpe)|*.jpeg;*.jpg;*.jpe|JPEG 2000 Files (*.jp2)|*.jp2" +
            "|Portable Network Graphics (*.png)|*.png|Portable Image Format (*.pbm;*.pgm;*.ppm)|*.pbm;*.pgm;*.ppm" +
            "|Sun Rasters (*.sr;*.ras)|*.sr;*.ras|TIFF Files (*.tiff;*.tif)|*.tiff;*.tif"
ImageFile.s = OpenFileRequester("Choose an image file", "", Pattern, 0)

If FileSize(ImageFile) > 0
  Select LCase(GetExtensionPart(ImageFile))
    Case "jpeg", "jpg", "jpe"
      UseJPEGImageDecoder()
    Case "png"
      UsePNGImageDecoder()
    Case "tiff", "tif"
      UseTIFFImageDecoder()
  EndSelect
  UseJPEGImageEncoder()
  pbimage = LoadImage(#PB_Any, ImageFile)

  If IsImage(pbimage)
    *buffer = EncodeImage(pbimage, #PB_ImagePlugin_JPEG)
    *mat.CvMat = cvCreateMatHeader(ImageHeight(pbimage), ImageWidth(pbimage), CV_MAKETYPE(#CV_32F, 1))
    cvSetData(*mat, *buffer, #CV_AUTOSTEP)
    *image.IplImage = cvDecodeImage(*mat, #CV_LOAD_IMAGE_COLOR)
  EndIf
EndIf
;...
NB*: The Procedure OpenCV2PBImage_ASM was provided by wilbert.
LiK137
Enthusiast
Enthusiast
Posts: 279
Joined: Wed Jun 23, 2010 5:13 pm

Re: PBImage or ImageHandle To OpenCV *Image.IplImage

Post by LiK137 »

With the help and hint of JHPJHP (Big thanx to him)

Code: Select all

Procedure pb2CVIplImage(pbImage.i)
  If IsImage(pbImage)
    *buffer = EncodeImage(pbImage, #PB_ImagePlugin_JPEG)
    *mat.CvMat = cvCreateMatHeader(ImageHeight(pbImage), ImageWidth(pbImage), CV_MAKETYPE(#CV_32F, 1))
    cvSetData(*mat, *buffer, #CV_AUTOSTEP)
    *image.IplImage = cvDecodeImage(*mat, #CV_LOAD_IMAGE_COLOR)
    FreeMemory(*buffer)
    cvReleaseMat(@*mat)
    cvReleaseImage(@*image)
  EndIf  
EndProcedure


Procedure pb2CVIplImage_1(pbImage)
  If IsImage(pbImage)
    PokeL(@*size, ImageWidth(pbImage)) : PokeL(@*size + 4, ImageHeight(pbImage))
    *image.IplImage = cvCreateImage(*size, #IPL_DEPTH_8U, 3)

    If StartDrawing(ImageOutput(pbImage))
      *image\imageData = DrawingBuffer()
      StopDrawing()
    EndIf
    cvFlip(*image, #Null, 0)
    cvReleaseImage(@*image)
  EndIf
EndProcedure  
Post Reply