BGR转HSI
来源:互联网 发布:linux查找文件夹路径 编辑:程序博客网 时间:2024/05/16 19:47
int bgr2hsi2(Mat &image,Mat &hsi)
{
if(!image.data){
//cout<<"Miss Data"<<endl;
return -1;
}
int nl = image.rows;
int nc = image.cols;
if(image.isContinuous()){
nc = nc*nl;
nl = 1;
}
Mat(image.size(), CV_32FC3).copyTo(hsi);
for(int i = 0;i < nl;i++){
uchar *src = image.ptr<uchar>(i);
float *dst = hsi.ptr<float>(i);
for(int j = 0;j < nc;j++){
//float b = src[j*3]/255.0;
//float g = src[j*3+1]/255.0;
//float r = src[j*3+2]/255.0;
float b = src[j*3];
float g = src[j*3+1];
float r = src[j*3+2];
float num = (float)(0.5*((r-g)+(r-b)));
float den = (float)sqrt((r-g)*(r-g)+(r-b)*(g-b));
float H,S,I;
if(den == 0){ //分母不能为0
H = 0;
}
else{
double theta = acos(num/den);
H = theta;
//if(b <= g)
// H = theta/(CV_PI*2);
//else
// H = (2*CV_PI - theta)/(2*CV_PI);
}
double minRGB = min(min(r,g),b);
den = r+g+b;
if(den == 0) //分母不能为0
S = 0;
else
S = 1 - 3*minRGB/den;
I = den/3.0;
//将S分量和H分量都扩充到[0,255]区间以便于显示;
//一般H分量在[0,2pi]之间,S在[0,1]之间
dst[3*j] = H;
dst[3*j+1] = S;
dst[3*j+2] = I;
}
}
//vector<Mat> vecMat;
//split(hsi, vecMat);
//vector<double> vecMean;
//vector<double> vecDev;
//meanStdDev(vecMat[0], vecMean, vecDev);
//printf("%lf, %lf\n", vecMean[0], vecDev[0]);
//meanStdDev(vecMat[1], vecMean, vecDev);
//printf("%lf, %lf\n", vecMean[0], vecDev[0]);
//meanStdDev(vecMat[2], vecMean, vecDev);
//printf("%lf, %lf\n", vecMean[0], vecDev[0]);
return 0;
}
- BGR转HSI
- OpenCV | YUV420_NV21 转 BGR
- NV21转BGR图像
- YUY2转RGB(或BGR)
- OPENCV中Bayer转BGR
- RGB转HSI
- HSI
- HSI
- RGB转HSI C代码(转载)
- matlab下 hsi转rgb代码
- RGB与HSI的互转
- 【Python+OpenCV】实现RGB转HSI
- 【C++版本】OpenCV实现RGB转HSI
- opencv人脸识别,jni中Bitmap转BGR格式
- java:BufferedImage判断图像通道顺序并转RGB/BGR
- BGR调色
- 【Matlab学习笔记】1.RGB空间转HSI空间
- openCV人脸识别,yuv420sp格式转BGR传入Mat矩阵
- 第五章 循环结构
- 【答谢篇】——运营微信,就是在运营人脉,运营关系
- Linux设备树语法详解
- 图片横向滚动 01-兼容IE8和Chrome浏览器
- 11
- BGR转HSI
- ListView中禁用禁止Ratingbar的点击事件
- Hadoop集群中添加或删除节点
- 6.分页与排序
- 程序员日记一号:多项式运算(加减乘)
- 支持正则表达式的String对象的方法
- Qt实现快捷键
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
- 搭建环境