Use OpenCV para separar la imagen RGB en componentes rojo, verde y azul.
Este pequeño programa OpenCV muestra cómo separar la imagen RGB en componentes R, G y B. El programa está escrito en programación de bajo nivel ya que hay una función integrada en OpenCV que haría que este código sea más eficiente. Sin embargo, este ejemplo profundiza la comprensión de cómo la imagen se divide en una matriz de píxeles y cómo se puede manipular cada píxel por separado.
ESCRIBIR CÓDIGO
#include
#include "cv.h"
#include "highgui.h"
using namespace std;
int main( int argc, char** argv )
{
//load color img specified by first argument
//IplImage *img = cvLoadImage( argv[1]);
IplImage *img = cvLoadImage
(argv[1], CV_LOAD_IMAGE_COLOR );
IplImage *red = cvCreateImage
(cvSize(img->width, img->height ),
img->depth, img->nChannels );
IplImage *green = cvCreateImage
(cvSize(img->width, img->height ),
img->depth, img->nChannels );
IplImage *blue = cvCreateImage
(cvSize(img->width, img->height ),
img->depth, img->nChannels );
// setup the pointer to access img data
uchar *pImg = ( uchar* )img->imageData;
// setup pointer to write data
uchar *pRed = ( uchar* )red->imageData;
uchar *pGreen = ( uchar* )green->imageData;
uchar *pBlue = ( uchar* )blue->imageData;
int i, j, rED, gREEN, bLUE, byte;
for( i = 0 ; i < img->height ; i++ )
{
for( j = 0 ; j < img->width ; j++ )
{
rED = pImg[i*img->widthStep + j*img->nChannels + 2];
gREEN = pImg[i*img->widthStep + j*img->nChannels + 1];
bLUE = pImg[i*img->widthStep + j*img->nChannels + 0];
// RED
pRed[i*img->widthStep + j*img->nChannels + 2] = rED;
// GREEN
pGreen[i*img->widthStep + j*img->nChannels + 1] = gREEN;
// BLUE
pBlue[i*img->widthStep + j*img->nChannels + 0] = bLUE;
}
}
// save images
cvSaveImage( argv[2], red );
cvSaveImage( argv[3], green );
cvSaveImage( argv[4], blue );
return 0;
}
COMPILAR
g++ `pkg-config opencv --cflags --libs` \
separate-RGB.cpp -o separate-RGB
USO
./separate-RGB img.png red.png green.png blue.png