#include <cv.h>
#include <highgui.h>
# include <math.h>
#define M_PI 3.1415
void RGB_to_HSI(IplImage *src, IplImage *dst);
int main(void)
{
IplImage * oo = cvLoadImage ("6013202130.jpg", );
IplImage * xx = cvCreateImage (cvGetSize(oo), , );
RGB_to_HSI(oo, xx);
cvNamedWindow("原图", );
cvNamedWindow("HSI", );
cvShowImage("原图", oo);
cvShowImage("HSI" , xx);
cvWaitKey();
cvReleaseImage(&xx);
cvReleaseImage(&oo);
return ;
} void RGB_to_HSI(IplImage *src, IplImage *dst)
{
int i, j;
double b, g, r, numm, den, min, theta, H, S, I;
CvScalar s0;
for (i = ; i<src->height; i++)
for (j = ; j<src->width; j++)
{ s0 = cvGet2D(src, i, j);
b = s0.val[] / ;//rgb归一化
g = s0.val[] / ;
r = s0.val[] / ;
//几何推导法转换
numm = 0.5*((r - g) + (r - b));
den = sqrt((r - g)*(r - g) + (r - b)*(g - b));
if (den == )
H = ;
else
{
theta = acos(numm / den);
if (b>g)
H = ( * M_PI - theta) / ( * M_PI);
else
H = theta / ( * M_PI);
}
min = (b>g) ? g : b;
min = (min>r) ? r : min;
den = r + g + b;
if (den == )
S = ;
else
S = - * min / den;
I = (r + g + b) / ;
cvSet2D(dst, i, j, cvScalar(H * , S * , I * ));
}
}

最新文章

  1. 判断ie版本
  2. Stream 和 byte[] 之间的转换
  3. GIL与线程互斥锁
  4. 第一次自己写jquery图片延迟加载插件,不通用,但修改一下还是可以使用到很多页面上的
  5. iOS 用宏定义写一个单例(Singleton)
  6. Android调用系统自带的文件管理器进行文件选择并读取
  7. 关于word-break,word-wrap换行
  8. CSS3中text-overflow支持以...代替超出文本
  9. java与数据结构(6)---java实现链栈
  10. hadoop2.2.0 MapReduce求和并排序
  11. WebRequest调用
  12. 新版本chrome浏览器控制台怎么设置成独立的窗口
  13. java 邮件发送的公共方法
  14. 购物车【JavaWeb小项目、简单版】
  15. iOS-----------计算两个时间的时间差
  16. Exp1 PC平台逆向破解 20164303 景圣
  17. java基础hashmap
  18. spring boot整合reids 然后实现缓存分页(方法之一) 以及RedisTemplate存到reids 里面get 就消失的坑
  19. WPF 使用RPC调用其他进程
  20. SpringBoot(八):系统错误统一拦截器

热门文章

  1. Laravel的三种安装方法总结
  2. bjwc Day1 暴力大战
  3. 关于qwerta
  4. [POI 2000] 公共串
  5. POJ1797(dijkstra求最短最长边)
  6. Python中with...as的用法
  7. github怎么创建一个项目,怎么添加一个ssh-key的客户
  8. java之装箱拆箱
  9. jQuery命名空间和自定义插件的的多种方法
  10. matlab新手入门(一)(翻译)