Este pequeño programa OpenCV demuestra cómo separar la imagen RGB en los componentes R, G y B. El programa está escrito en programación de bajo nivel, ya que hay una función de construcción en OpenCV, lo 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 matriz de píxeles y cómo se puede manipular cada píxel por separado.
Código de escritura
#Include #Include "CV.H "#include" Highgui.h "Usando el espacio de nombres std; int ], Cv_load_image_color); iPlimage *rojo = cvCreateImage (cvSize (img-> width, img-> altura), img-> profundidad, img-> nchannels); iPlimage *verde = cvcreateImage (cvSize (img-> width, img------------------ > altura), img-> profundidad, img-> nchannels); iPlimage *blue = cvcreateImage (cvSize (img-> ancho, img-> altura), img-> profundidad, img-> nchannels); // Configura el puntero Para acceder a los datos IMG álchar * pimg = (ubar *) img-> iMageData; // Configurar puntero para escribir datos UCHAR * pred = (ubar *) rojo-> iMageData; ubar * pgreen = (ub *) green-> iMageData; UChar * pBlue = (UChar *) Blue-> iMagedata; int i, J, rojo, verde, azul, byte; para (i = 0; i altura; i ++) para (j = 0; j ancho; j ++) rojo = pimg [i*img-> widthstep + j*img-> nchannels + 2];verde = pimg [i*img-> widthstep + j*img-> nchannels + 1]; Blue = Pimg [i*img-> widthstep + j*img-> nchannels + 0]; // rojo pred [i*img-> widthstep + j*img-> nchannels + 2] = rojo; // Pgreen verde [i*img-> widthstep + j*img-> nchannels + 1] = verde; // azul pblue [i*img-> widthstep + j*img-> nchannels + 0] = azul; // Guardar imágenes CVSaveImage (argv [2], rojo); cvsaveImage (argv [3], verde); cvsaveImage (argv [4], azul); regresar 0;
COMPILAR
G ++ 'PKG-Config OpenCV--CFlags-Libs' \ separado-RGB.CPP -O separado -RGB
USO
./IMG por separado-RGB.png rojo.PNG Green.PNG Azul.png