您的位置:首页 > 运维架构

OPENCV中 RGB 转换到 HSI空间

2012-03-10 11:06 381 查看
本文实现了RGB空间转换到HSI空间,并分别求出S分量(饱和度)、I分量(亮度、光强)

#include "stdafx.h"
#include "highgui.h"
#include"cv.h"

int main(int argc, char *argv[])
{ 
 IplImage *img = cvLoadImage("G:\\huo.jpg");

 IplImage *r  = cvCreateImage( cvGetSize(img), img->depth, 1);
 IplImage *g  = cvCreateImage( cvGetSize(img), img->depth, 1);
 IplImage *b  = cvCreateImage( cvGetSize(img), img->depth, 1);

 CvMat *rmat = cvCreateMat( img->height, img->width, CV_32FC1);
 CvMat *gmat = cvCreateMat( img->height, img->width, CV_32FC1);
 CvMat *bmat = cvCreateMat( img->height, img->width, CV_32FC1);
 CvMat *temp1 = cvCreateMat( img->height, img->width, CV_32FC1);
 CvMat *temp2 = cvCreateMat( img->height, img->width, CV_32FC1);
 CvMat *temp3 = cvCreateMat( img->height, img->width, CV_32FC1);

 cvNamedWindow("saturation", 1);
 cvNamedWindow("intensity", 1);
 cvSplit( img, b, g, r, NULL);
 cvConvert(b, bmat);
 cvConvert(g, gmat);
 cvConvert(r, rmat);

 //计算饱和度S

 cvMin( bmat, gmat, temp1);
 cvMin( rmat, temp1, temp1);
 cvAdd( bmat, gmat, temp2 );
 cvAdd( temp2, rmat, temp2);

 cvDiv( temp1, temp2, temp3, 765.0);
 cvAbsDiffS( temp3, temp3, cvScalarAll( 255.0 ));
 cvConvert( temp3, r );

 //计算亮度I

 cvAddWeighted( bmat, 1.0/3.0, rmat, 1.0/3.0, 0.0, bmat );
 cvAddWeighted( bmat, 1.0, gmat, 1.0/3.0, 0.0, bmat);
 cvConvert( bmat, g );

 

 cvShowImage("saturation", r);
 cvShowImage( "intensity", g);
 cvWaitKey(0);
 cvReleaseImage(&img);
 cvDestroyWindow("saturation");
 cvDestroyWindow("intensity");
 
 
 return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: