RGB图像转化为HSI图像
来源:互联网 发布:淘宝店铺类目怎么修改 编辑:程序博客网 时间:2024/05/20 20:58
最近用到RGB图像需要往HSI上转化,就参照公式和奈奈酱前辈的写了点代码,
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/highgui/highgui.hpp"
#include<math.h>
using namespace std;
using namespace cv;
int main ()
{
Mat BGRImage,BImage,GImage,RImage,HImage,SImage,IImage,dstImage;
BGRImage=imread("1.jpg");
imshow("原图",BGRImage);
Mat HSIImage = Mat(Size(BGRImage.cols, BGRImage.rows), CV_8UC3);
// 分离R G B 分量
vector<Mat>channels;
split(BGRImage,channels);
BImage = channels.at(0);
GImage = channels.at(1);
RImage = channels.at(2);
vector<Mat>channel;
split(HSIImage,channel);
HImage=channel.at(0);
SImage=channel.at(1);
IImage=channel.at(2);
// HImage = Mat(BImage.size(),BImage.type());
// SImage = Mat(BImage.size(),BImage.type());
// IImage = Mat(BImage.size(),BImage.type());
// 建立同样大小的矩阵存放HSI的值
// dstImage = Mat::zeros(srcImage.size(),srcImage.type());
// HImage = Mat::zeros(BImage.size(),BImage.type());
int row = BGRImage.rows;
int col = HSIImage.cols;
for(int i=0;i<row;++i)
{
uchar* B = BImage.ptr<uchar>(i);
uchar* G = GImage.ptr<uchar>(i);
uchar* R = RImage.ptr<uchar>(i);
uchar* H = HImage.ptr<uchar>(i);
uchar* S = SImage.ptr<uchar>(i);
uchar* I = IImage.ptr<uchar>(i);
for(int j=0;j<col;++j)
{
//计算H值
double L =(2*R[j]-B[j]-G[j]);
double K = R[j]*R[j]+B[j]*B[j]+G[j]*G[j]-R[j]*G[j]-B[j]*R[j]-B[j]*G[j];
if (K==0)
H[j]=0 ;
else
{
double M = sqrt(K);
double T ;
T=acos(L/(2*M))*180/3.14;
if (G[j]>=B[j])
H[j]=int(T*255/360);
else
H[j]=int((360-T)*255/360);
}
// 计算 S 值
double P,Q;
if((R[j]<=G[j])&&(R[j]<=B[j]))
P=R[j];
if((G[j]<=R[j])&&(G[j]<=B[j]))
P=G[j];
if((B[j]<=R[j])&&(B[j]<=G[j]))
P=B[j];
Q = R[j]+B[j]+G[j];
if (Q==0)
S[j]=0;
else
{
S[j]=int((1-3*P/Q)*255);
}
// 计算 I 值
I[j]=(R[j]+B[j]+G[j])/3.0;
}
B=NULL;
G=NULL;
R=NULL;
H=NULL;
S=NULL;
I=NULL;
}
// channel.at(0) = HImage;
// channel.at(1) = SImage;
// channel.at(2) = IImage;
merge(channel,HSIImage);
imshow("HSI图像",HSIImage);
waitKey(0);
return 0;
}
- RGB图像转化为HSI图像
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- 图像色彩空间之RGB与HSI
- 使用CImage类将RGB图像转化为灰度图像
- 图像处理之灰色图转化为RGB图像
- opencv将灰度图转化为RGB三通道图像
- 图像的空间转换 HSI→RGB 和 RGB→HSI
- 图像的RGB颜色空间和HSI空间的转换
- 利用Matlab将RGB图像转换到HSI空间
- opencv实现将RGB图像转换到HSI空间
- 利用OpenCV的imread将RGB图像转化为灰度图像!
- 用cvCvtColor转化RGB彩色图像为灰度图像时发生的小失误
- yuv420 还原为RGB图像
- RGB图像存储为AVI?
- 图像处理--RGB到HSI的彩色转换--图像分割(MFC VC++)
- YUV 读取图像并转化成RGB
- 灰度图像转化为伪彩色图像
- 利用opencv将录制的rgb图像转化为yuv文件并保存。
- php实现多线程
- Ant打包出现 编码utf-8不可映射字符 的解决办法
- String Format for Double [C#]
- ListView的一些常用方法:setChoiceMode(),getCheckedItemPositions() 。
- git init 与git init --bare
- RGB图像转化为HSI图像
- 算法一些例子
- Contest1002 - HHU ACM 综合训练1 B题 Friendship of Mouse(朴素算法)
- U-BOOT-2016.07移植 (第四篇) 修改代码,从NOR启动
- Linux每天一点变量
- CSS3样式控制input按钮效果
- [Android Memory] 内存分析工具 MAT 的使用
- C#的集合类
- Node.js使用supervisor