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;
}