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