Wednesday, November 24, 2004

Load, Save, create and release images

Load .jpg image and save as BMP. Functions:
cvLoadImage, cvSaveImage

// Image Open Save.cpp : Defines the entry point for the console application.
//
#include "cv.h"
#include "highgui.h"

int main()
{
IplImage* my_image = 0;
my_image = cvLoadImage( "Lena.jpg" , 1 );// Load An image
cvNamedWindow( "Lena", CV_WINDOW_AUTOSIZE );// Create a window
cvShowImage( "Lena",my_image);
cvWaitKey(-1);// Wait until "space" pressed, or window closed.
cvSaveImage("Lena.bmp",my_image); // Save the previously opened image as BMP.
return 0;
}



Handles these types:



! Windows bitmap (.bmp, .dib)

! Sun Raster (.sr, .ras)


! JPEG (.jpeg, .jpg, .jpe)


! Portable Network Graphics (.png)


! Portable image (.pbm, .pgm, .ppm)


! TIFF (.tiff, .tif)


Load a sequece of images-> .




//
// The simplest OpenCV program.
// It creates window and displays a sequence of images in it
//

#include "cv.h" // include core library interface
#include "highgui.h" // include GUI library interface
#include <stdio.h>
#include <math.h>
#include <string.h>

IplImage* img = 0; // Declare IPL/OpenCV image pointers
IplImage* img0 = 0;

char* names[] = { "../pic1.bmp", "../pic2.bmp", "../pic3.bmp",
"../pic5.bmp", "../pic6.bmp", "../pic7.bmp" };

int main()
{
int i;
cvvNamedWindow( "image", 1 ); // create HighGUI window with name "image"

for( i = 0; i < 6; i++ )
{
img0 = cvvLoadImage( names[i] ); // load i-th image
img = cvCloneImage( img0 ); // make a copy of it
cvvShowImage( "image", img ); // show image in the window "image"
cvvWaitKey(0); // wait for key. The function has
// an event processing loop inside
cvReleaseImage( &img ); // release both images
cvReleaseImage( &img0 );
}

return 0;
}



Create image



// int width, height (in pixels)

// depth e.g. IPL_DEPTH_8U, IPL_DEPTH_32F ...


// int nChannels e.g. 1,3



IplImage* img= cvCreateImage( cvSize(width, height), depth, nChannels );



//To release the image do this:


cvReleaseImage(&img);



//Create a image with the same size, depth and channels



//src = source-image (IplImage *)

//dest = destination-image



IplImage* dest = cvCreateImage( cvGetSize(src), src->depth, src->nChannels );



Seperate RGB channel


//src = IplImage *, IPL_DEPTH_8U, nChannels =3



IplImage * red = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);

IplImage * green = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);



IplImage * blue = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);



cvCvtPixToPlane(src,red,green,blue,NULL);



//OR

//src = IplImage *, IPL_DEPTH_8U, nChannels =4



IplImage * red = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);

IplImage * green = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);


IplImage * blue = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);



IplImage * alpha = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);



cvCvtPixToPlane(src,red,green,blue,alpha);



Convert Color


//from RGB (3-Channel)=src to GRAY (1 Channel)=dest


IplImage* dest= cvCreateImage(cvGetSize(src), IPL_DEPTH_8U , 1);


cvCvtColor(src ,dest, CV_RGB2GRAY);



//from GRAY(1-Channel)=src to RGB(3 Channel)=dest



IplImage* dest= cvCreateImage(cvGetSize(src), IPL_DEPTH_8U , 3);

cvCvtColor(src ,dest, CV_GRAY2RGB);



From 32F image to 8U


//src = IplImage * - depth = IPL_DEPTH_32F, nChannels =1


//dest = IplImage * - depth = IPL_DEPTH_8U, nChannels =1 (gray)


double scale, shift;


double minVal, maxVal;



cvMinMaxLoc(src, &minVal, &maxVal);

scale = 255/(maxVal - minVal);


shift = -minVal*scale;



cvConvertScale (src, dest, scale, shift);

No comments:

Post a Comment