【C++版本】OpenCV实现RGB转HSI
来源:互联网 发布:java md5解密密码 编辑:程序博客网 时间:2024/05/29 07:38
#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(){ Mat src = imread("123.jpg", 1); if(src.empty()) cerr << "Error: Loading image" << endl; Mat hsi(src.rows, src.cols, src.type()); float r, g, b, H, S, I, num, den, theta, sum, min_RGB; for(int i=0; i<src.rows; i++) { for(int j=0; j<src.cols; j++) { b = src.at<Vec3b>(i, j)[0]; g = src.at<Vec3b>(i, j)[1]; r = src.at<Vec3b>(i, j)[2]; // 归一化 b = b/255.0; g = g/255.0; r = r/255.0; num = 0.5 * ((r-g)+(r-b)); den = sqrt((r-g)*(r-g)+(r-b)*(g-b)); theta = acos(num/den); if(den == 0){ H = 0; // 分母不能为0 } else{ if(b <= g){ H = theta; } else{ H = (2*3.14169265 - theta); } } min_RGB = min(min(b,g),r); // min(R,G,B) sum = b+g+r; if(sum == 0) { S = 0; }else{ S = 1 - 3*min_RGB/sum; } I = sum/3.0; H = H/(2*3.14159265); // 将S分量和H分量都扩充到[0,255]区间以便于显示;一般H分量在[0,2pi]之间,S在[0,1]之间 hsi.at<Vec3b>(i, j)[0] = H*255; hsi.at<Vec3b>(i, j)[1] = S*255; hsi.at<Vec3b>(i, j)[2] = I*255; } } namedWindow("rgb_lwpImg", CV_WINDOW_AUTOSIZE); namedWindow("hsi_lwpImg", CV_WINDOW_AUTOSIZE); imshow("rgb_lwpImg", src); imshow("hsi_lwpImg", hsi); waitKey(0); return 0;}
阅读全文
1 0
- 【C++版本】OpenCV实现RGB转HSI
- 【Python+OpenCV】实现RGB转HSI
- RGB转HSI C代码(转载)
- 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换
- opencv实现将RGB图像转换到HSI空间
- RGB转HSI
- OPENCV中 RGB 转换到 HSI空间
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- OpenCV实现RGB颜色空间和HSI颜色空间的相互转换
- Matlab实现HSI与RGB转换
- 不用opencv实现RGB图像转RGBA C
- matlab下 hsi转rgb代码
- RGB与HSI的互转
- OPENCV 从RGB空间转换到HSI空间
- 【OpenCV学习笔记】3.1 RGB图像转换为HSI图像
- matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
- 1.1数据驱动的图像分类流程
- freertos_lwip stm32F2系列 非线程安全需要加锁保护
- 计时器
- webpack 3 & React 的配置 。
- 注解示例
- 【C++版本】OpenCV实现RGB转HSI
- Sort Characters By Frequency问题及解法
- JAVA字符串转日期或日期转字符串
- Android中scrollview的scrollto方法不起作用的办法
- java基础第十八天 多线程
- js实现二级联动
- 数据挖掘:概念与技术(第三版)之第十二章的学习记录
- 斯坦福 机器学习-第三章 支持向量机
- (TCP模式)客户端与服务器之间的文件传输