OpenCV实现RGB颜色空间和HSI颜色空间的相互转换

本文介绍了如何使用OpenCV库进行RGB到HSI颜色空间的转换,以及HSI回转RGB的转换。提供了核心转换公式,并附带了仓促编写的代码示例。测试图像为彩色Lena图,结果显示了两种颜色模型的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

关于HSI颜色空间参照维基百科:http://zh.wikipedia.org/wiki/HSI%E8%89%B2%E5%BD%A9%E5%B1%AC%E6%80%A7%E6%A8%A1%E5%BC%8F

 

核心的转换公式:

 

RGB-->HSI

 

 

截图来自中科院刘定生老师的《数字图像处理与分析》课件。

 

HSI-->RGB

 

具体的数学公式参照冈萨雷斯版《数字图像处理(第三版)》432-434页,中译版的260-261页。

 

下面贴代码:

 
  
  1 #include "opencv_libs.h"  2 #include <highgui.h>  3 #include <cv.h>  4 #include <math.h>  5   6 /*  7  * 描述:实现RGB颜色模型到HSI颜色模型之间的相互转换  8  * 作者:qdsclove(qdsclove@gmail.com)  9  * 时间:16:01 4/17 星期三 2013 10  */ 11  12 // 将HSI颜色空间的三个分量组合起来,便于显示 13 IplImage* catHSImage(CvMat* HSI_H, CvMat* HSI_S, CvMat* HSI_I) 14 {
    
     15     IplImage* HSI_Image = cvCreateImage( cvGetSize( HSI_H ), IPL_DEPTH_8U, 3 ); 16  17     for(int i = 0; i < HSI_Image->height; i++) 18     {
    
     19         for(int j = 0; j < HSI_Image->width; j++) 20         {
    
     21             double d = cvmGet( HSI_H, i, j ); 22             int b = (int)(d * 255/360); 23             d = cvmGet( HSI_S, i, j ); 24             int g = (int)( d * 255 ); 25             d = cvmGet( HSI_I, i, j ); 26             int r = (int)( d * 255 ); 27  28             cvSet2D( HSI_Image, i, j, cvScalar( b, g, r ) ); 29         } 30     } 31  32     return HSI_Image; 33 } 34  35 // 将HSI颜色模型的数据转换为RGB颜色模型的图像 36 IplImage* HSI2RGBImage(CvMat* HSI_H, CvMat* HSI_S, CvMat* HSI_I) 37 {
    
     38     IplImage * RGB_Image = cvCreateImage(cvGetSize(HSI_H), IPL_DEPTH_8U, 3 ); 39  40     int iB, iG, iR; 41     for(in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值