/*
本程序实现将一个多通道彩色图像转换到HLS颜色空间,并分离其各个通道,依次显示各个通道图像;
再将各个通道图像融合成HLS图像,转换到RGB颜色空间,并显示出来。
程序作者:何云
完成时间:2009/8/15/16:26
*/
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
int main()
{
//从工程目录加载图像1.jpg
IplImage *pImg = cvLoadImage("1.jpg", 1);
//创建HLS颜色空间图像指针
IplImage *pImgHLS = cvCreateImage(cvSize(480, 640), 8, 3);
IplImage *pImgH = cvCreateImage(cvSize(480, 640), 8, 1);
IplImage *pImgL = cvCreateImage(cvSize(480, 640), 8, 1);
IplImage *pImgS = cvCreateImage(cvSize(480, 640), 8, 1);
//融合H,L,S
IplImage *pImgMerge = cvCreateImage(cvSize(480, 640), 8, 3);
//融合的HLS转换到RGB空间
IplImage *pImgRGB = cvCreateImage(cvSize(480, 640), 8, 3);
//转换到HLS空间,分离H,L,S通道
cvCvtColor(pImg, pImgHLS, CV_BGR2HLS);
cvSplit(pImgHLS, pImgH, pImgL, pImgS, NULL);
//将H,L,S各通道融合成HLS图像,转换到RGB空间
cvMerge(pImgH, pImgL, pImgS, NULL, pImgMerge);
cvCvtColor(pImgHLS, pImgRGB, CV_HLS2BGR);
//每隔1秒显示一幅图像
cvNamedWindow("Image", 1);
cvShowImage("Image", pImg);
cvWaitKey(1000);
cvNamedWindow("HLS", 1);
cvShowImage("HLS", pImgHLS);
cvWaitKey(1000);
cvNamedWindow("H", 1);
cvShowImage("H", pImgH);
cvWaitKey(1000);
cvNamedWindow("L", 1);
cvShowImage("L", pImgL);
cvWaitKey(1000);
cvNamedWindow("S", 1);
cvShowImage("S", pImgS);
cvWaitKey(1000);
cvNamedWindow("merge", 1);
cvShowImage("merge", pImgMerge);
cvWaitKey(1000);
cvNamedWindow("RGB", 1);
cvShowImage("RGB", pImgRGB);
//资源释放
cvWaitKey(0);
cvDestroyWindow("Image");
cvDestroyWindow("HLS");
cvDestroyWindow("H");
cvDestroyWindow("L");
cvDestroyWindow("S");
cvDestroyWindow("merge");
cvDestroyWindow("RGB");
cvReleaseImage(&pImg);
cvReleaseImage(&pImgH);
cvReleaseImage(&pImgL);
cvReleaseImage(&pImgS);
cvReleaseImage(&pImgHLS);
cvReleaseImage(&pImgMerge);
cvReleaseImage(&pImgRGB);
return 0;
}