Image Processing in C with OpenCV: Loading and Swapping Image Halves

Classified in Computers

Written on in English with a size of 3.85 KB

Image Processing in C with OpenCV

#include <stdio.h>
#include <stdlib.h>


#include <opencv/cv.h>
#include <opencv/highgui.h>


int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Error: Usage %s image_file_name\n", argv[0]);
return EXIT_FAILURE;
}


//CV_LOAD_IMAGE_COLOR = 1 forces the resultant IplImage to be colour.
//CV_LOAD_IMAGE_GRAYSCALE = 0 forces a greyscale IplImage.
//CV_LOAD_IMAGE_UNCHANGED = -1
IplImage* Img = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED);


// Always check if the program can find the image file
if (!Img)
{
printf("Error: file %s not found\n", argv[1]);
return EXIT_FAILURE;
}


// a visualization window is created with title: image file name
cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE);
// Img is shown in 'image' window
cvShowImage(argv[1], Img);
cvWaitKey(0);
int fila, columna;
// Crea la imagen para la componete azul
IplImage* ImgR = cvCreateImage(cvSize(Img->width, Img->height), IPL_DEPTH_8U, 3);
int mitad = Img->height / 2;


cvNamedWindow("Componente R", CV_WINDOW_AUTOSIZE);


for (fila = 0; fila < mitad; fila++)
{
unsigned char *pImg = (unsigned char *) Img->imageData + (fila * Img->widthStep);
unsigned char *pImgR = (unsigned char *) ImgR->imageData + (fila + mitad) * ImgR->widthStep;


for (columna = 0; columna < Img->width; columna++)
{


*pImgR = *pImg;
pImgR++;
pImg++;
*pImgR = *pImg;
pImgR++;
pImg++;
*pImgR = *pImg;
pImgR++;
pImg++;
}
cvShowImage("Componente R", ImgR);
//cvWaitKey(10);
}


for (fila = 0; fila < mitad; fila++)
{
unsigned char *pImg = (unsigned char *) Img->imageData + (fila + mitad) * Img->widthStep;
unsigned char *pImgR = (unsigned char *) ImgR->imageData + fila * ImgR->widthStep;
for (columna = 0; columna < Img->height; columna++)
{
*pImgR = *pImg;
pImgR++;
pImg++;
*pImgR = *pImg;
pImgR++;
pImg++;
*pImgR = *pImg;
pImgR++;
pImg++;
}
cvShowImage("Componente R", ImgR);
//cvWaitKey(10);
}


// crea y muestra las ventanas con las imágenes


cvNamedWindow("Componente R", CV_WINDOW_AUTOSIZE);
cvShowImage("Componente R", ImgR);
cvWaitKey(0);


// memory release for images before exiting the application
cvReleaseImage(&Img);
cvReleaseImage(&ImgR);


// Self-explanatory
cvDestroyWindow(argv[1]);
cvDestroyWindow("Componente R");


return EXIT_SUCCESS;
}

Related entries: