C Image Processing with OpenCV: Splitting and Inverting Image Quadrants
C Image Processing with OpenCV: Splitting and Inverting Image Quadrants
#include <stdio.h>
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
/* 1 Imagen ______2 */
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Error: Usage %s image_file_name\n", argv[0]);
return EXIT_FAILURE;
}
///////////////////////////////////////////////////////////////////////////////
IplImage* Img = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED);
///////////////////////////////////////////////////////////////////////////////
if (!Img) {
printf("Error: file %s not found\n", argv[1]);
return EXIT_FAILURE;
}
///////////////////////////////////////////////////////////////////////////////
cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE);
cvShowImage(argv[1], Img);
cvWaitKey(0);
///////////////////////////////////////////////////////////////////////////////
IplImage* ImgNUEVA = cvCreateImage(cvSize(Img->width, Img->height * 4), IPL_DEPTH_8U, 3);
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/* RECORTE_INVERTIR(ARRIBA/ABAJO)
int fila, columna;
int filanueva = Img->height / 2; // altura por la mitad
for (fila = 0; fila < Img->height / 2; fila++) // recorre hasta la mitad de la imagen
{
unsigned char *pImg = (unsigned char *) Img->imageData + fila * Img->widthStep;
unsigned char *pImgNUEVA = (unsigned char *) ImgNUEVA->imageData + filanueva * ImgNUEVA->widthStep;
for (columna = 0; columna < Img->width; columna++)
{
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
}
filanueva++;
}
filanueva = 0;
for (fila = Img->height / 2; fila < Img->height; fila++)
{
unsigned char *pImg = (unsigned char *) Img->imageData + fila * Img->widthStep;
unsigned char *pImgNUEVA = (unsigned char *) ImgNUEVA->imageData + filanueva * ImgNUEVA->widthStep;
for (columna = 0; columna < Img->width; columna++)
{
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
}
filanueva++;
}
*/
////////////////////////////////////
/* RECORTE_INVERTIR(DERECHA/IZQUIERDA)
int fila, columna;
for (fila = 0; fila < Img->height; fila++)
{
unsigned char *pImg = (unsigned char *) Img->imageData + Img->widthStep / 2 + fila * Img->widthStep;
unsigned char *pImgNUEVA = (unsigned char *) ImgNUEVA->imageData + fila * ImgNUEVA->widthStep;
for (columna = Img->width / 2; columna < Img->width; columna++)
{
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
}
unsigned char *pImg2 = (unsigned char *) Img->imageData + fila * Img->widthStep;
// unsigned char *pImgNUEVA2 = (unsigned char *) ImgNUEVA->imageData + Img->widthStep / 2 + fila * ImgNUEVA->widthStep;
for (columna = Img->width / 2; columna < Img->width; columna++)
{
*pImgNUEVA++ = *pImg2++;
*pImgNUEVA++ = *pImg2++;
*pImgNUEVA++ = *pImg2++;
}
}
*/
////////////////////////////////////
/* MARCO_NEGRO
int fila, columna;
for (fila = 0; fila < Img->height; fila++)
{
unsigned char *pImg = (unsigned char *) Img->imageData + fila * Img->widthStep;
unsigned char *pImgNUEVA = (unsigned char *) ImgNUEVA->imageData + (15 * ImgNUEVA->nChannels) + ((fila + 15) * ImgNUEVA->widthStep);
for (columna = 0; columna < Img->width; columna++)
{
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
*pImgNUEVA++ = *pImg++;
}
}
*/
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
cvNamedWindow("Componente NUEVA", CV_WINDOW_AUTOSIZE);
cvShowImage("Componente NUEVA", ImgNUEVA);
///////////////////////////////////////////////////////////////////////////////
cvWaitKey(0);
///////////////////////////////////////////////////////////////////////////////
cvReleaseImage(&Img);
cvReleaseImage(&ImgNUEVA);
///////////////////////////////////////////////////////////////////////////////
cvDestroyWindow(argv[1]);
cvDestroyWindow("Componente NUEVA");
///////////////////////////////////////////////////////////////////////////////
return EXIT_SUCCESS;
///////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////