【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
来源:互联网 发布:知乎 汉语 不及物动词 编辑:程序博客网 时间:2024/05/29 17:18
由于发现OpenCV中cvtColor()函数中没有给定RGB颜色模型到HSI模型的变换类型,学习一下自己写这个函数。
颜色模型变换公式
代码
#include<opencv2/opencv.hpp>#include<math.h>#include<vector>using namespace std;using namespace cv;//-------------------------- RGB 模型 转换为 HSI 模型--------------------//int main(){ Mat LeafBGRImage = imread("……/yy2.bmp"); Mat LeafHSIImage = Mat(Size(LeafBGRImage.cols, LeafBGRImage.rows), CV_8UC3); vector <Mat> channels; split(LeafHSIImage, channels); Mat Hvalue = channels.at(0); Mat Svalue = channels.at(1); Mat Ivalue = channels.at(2); for (int i = 0; i < LeafBGRImage.rows; ++i) for (int j = 0; j < LeafBGRImage.cols; ++j) { double H, S, I; int Bvalue = LeafBGRImage.at<Vec3b>(i, j)(0); int Gvalue = LeafBGRImage.at<Vec3b>(i, j)(1); int Rvalue = LeafBGRImage.at<Vec3b>(i, j)(2); //求Theta =acos((((Rvalue - Gvalue) + (Rvalue - Bvalue)) / 2) / sqrt(pow((Rvalue - Gvalue), 2) + (Rvalue - Bvalue)*(Gvalue - Bvalue))); double numerator = ((Rvalue - Gvalue) + (Rvalue - Bvalue)) / 2; double denominator = sqrt(pow((Rvalue - Gvalue), 2) + (Rvalue - Bvalue)*(Gvalue - Bvalue)); if (denominator == 0) H = 0; else{ double Theta = acos(numerator / denominator) * 180 / 3.14; if (Bvalue <= Gvalue) H = Theta; else H = 360 - Theta; } Hvalue.at<uchar>(i, j) = (int)(H * 255 / 360); //为了显示将[0~360]映射到[0~255] //求S = 1-3*min(Bvalue,Gvalue,Rvalue)/(Rvalue+Gvalue+Bvalue); int minvalue = Bvalue; if (minvalue > Gvalue) minvalue = Gvalue; if (minvalue > Rvalue) minvalue = Rvalue; numerator = 3 * minvalue; denominator = Rvalue + Gvalue + Bvalue; if (denominator == 0) S = 0; else{ S = 1 - numerator / denominator; } Svalue.at<uchar>(i, j) = (int)(S * 255);//为了显示将[0~1]映射到[0~255] I= (Rvalue + Gvalue + Bvalue) / 3; Ivalue.at<uchar>(i, j) = (int)(I); } merge(channels, LeafHSIImage); namedWindow("HSI"); imshow("HSI", LeafHSIImage); waitKey(6000); return 0;}
实例效果
0 0
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- opencv实现将RGB图像转换到HSI空间
- RGB图像转化为HSI图像
- OpenCV 原始RGB图像转换为灰度图像
- 基于opencv的YUV图像转换为RGB图像
- 图像的空间转换 HSI→RGB 和 RGB→HSI
- 图像的RGB颜色空间和HSI空间的转换
- 利用Matlab将RGB图像转换到HSI空间
- opencv,图像处理,rgb转换为hsv空间
- 图像处理--RGB到HSI的彩色转换--图像分割(MFC VC++)
- 图像色彩空间之RGB与HSI
- OPENCV中 RGB 转换到 HSI空间
- openCV彩色图像转换为灰度图像
- 图像处理--RGB与HSI颜色模型的转换方法介绍
- 怎样将图像转换为RGB图像模式
- C#将RGB图像转换为8位灰度图像
- C#将RGB图像转换为8位灰度图像
- C#将RGB图像转换为8位灰度图像
- 20151207
- 网易前端微专业,JavaScript程序设计:JS调试
- 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge
- php将文件夹打包成zip文件
- MyEclipse安装插件出现“resolving and validating the profile”卡死问题的解决方案
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- javaday16-集合框架
- 在ViewPager中添加ListView
- 5.1.4 I/O管理概述
- 4-9 UVA 1591 Data Mining 数据挖掘
- 第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本
- JDK的动态代理实现原理理解
- 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey
- 查询SQL强化练习