Verwenden Sie OpenCV, um das RGB-Bild in rot-grüne und blaue Komponenten zu unterteilen
Dieses kleine OpenCV-Programm zeigt, wie RGB-Images in R-, G- und B-Komponenten unterteilt werden. Das Programm ist in Low-Level-Programmierung geschrieben, da in OpenCV eingebaute Funktionen vorhanden sind, die diesen Code effizienter machen würden. Dieses Beispiel vertieft jedoch das Verständnis dafür, wie das Bild in eine Pixelmatrix aufgeteilt wird und wie jedes Pixel separat bearbeitet werden kann.
CODE SCHREIBEN
#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;
}
KOMPILIEREN
g++ `pkg-config opencv --cflags --libs` \
separate-RGB.cpp -o separate-RGB
VERWENDUNG
./separate-RGB img.png red.png green.png blue.png