Here a simple OpenCV example of separation of a image into its hue, saturation and value channels.
#include <stdio.h> #include <cv.h> #include <highgui.h> int main( int argc, char **argv ){ IplImage *img, *hsv, *hue, *sat, *val; int key = 0, depth; CvSize size; /* Load command line passed image, check it. */ if (argc>1) { img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR); if(!img){ printf("Could not open image."); exit -1; } if(img->nChannels!=3){ printf("We need color image!"); exit -1; } } else { printf("Usage: %s VIDEO_FILE\n", argv[0]); return 1; } /* Create a hsv image with 3 channels and hue, sat e val with 1 channel. All with the same size */ size = cvGetSize(img); depth = img->depth; hue = cvCreateImage(size, depth, 1); sat = cvCreateImage(size, depth, 1); val = cvCreateImage(size, depth, 1); hsv = cvCreateImage(size, depth, 3); cvZero(hue); cvZero(sat); cvZero(val); cvZero(hsv); /* Convert from Red-Green-Blue to Hue-Saturation-Value */ cvCvtColor( img, hsv, CV_BGR2HSV ); /* Split hue, saturation and value of hsv on them */ cvSplit(hsv, hue, sat, val, 0); /* Create windows, display them, wait for a key */ cvNamedWindow("original", CV_WINDOW_AUTOSIZE); cvNamedWindow("hue", CV_WINDOW_AUTOSIZE); cvNamedWindow("saturation", CV_WINDOW_AUTOSIZE); cvNamedWindow("value", CV_WINDOW_AUTOSIZE); cvShowImage("original", img); cvShowImage("hue", hue); cvShowImage("saturation", sat); cvShowImage("value", val); cvWaitKey(0); /* Free memory and get out */ cvDestroyWindow("original"); cvDestroyWindow("hue"); cvDestroyWindow("saturation"); cvDestroyWindow("value"); cvReleaseImage(&img); cvReleaseImage(&hsv); cvReleaseImage(&hue); cvReleaseImage(&sat); cvReleaseImage(&val); return 0; } |
Resized original image, photo by Robert Bradshaw at Wikimedia Commons.

Hue channel:

Saturation channel:

Value channel:

we can divide frames vertically… ?
I am trying to detect skin can u please help me how to merge hue ,Saturation,Cb,Cr channels in opencv.
Hi Silveira,
How can we alter hue, saturation and value saperately without doing it pixel by pixel ?
Regards,
D