点击链接→【数字图像处理】简单实践汇总

文章目录

  • 1. RBG转HSI理论
  • 2. RBG转HSI代码
  • 3. HSI转RBG,提取红色
  • 4. 效果

1. RBG转HSI理论

  • H:色调(Hue);
  • S:饱和度(Saturation);
  • I:亮度(Intensity);
  • 公式:
    亮度:I=13(R+G+B)饱和度:S=I−3(R+G+B)[min⁡(R,G,B)]色调:H=arccos⁡{[(R−G)+(R−B)]/2[(R−G)2+(R−B)(G−B)]1/2}亮度:I = \frac { 1 } { 3 } ( R + G + B ) \\ 饱和度:S = I - \frac { 3 } { ( R + G + B ) } [ \min ( R , G , B ) ] \\ 色调:H = \arccos \left\{\frac { [ ( R - G ) + ( R - B ) ] / 2 } { \left[ ( R - G ) ^ { 2 } + ( R - B ) ( G - B ) \right] ^ { 1 / 2 } } \right\} 亮度:I=31​(R+G+B)饱和度:S=I−(R+G+B)3​[min(R,G,B)]色调:H=arccos{[(R−G)2+(R−B)(G−B)]1/2[(R−G)+(R−B)]/2​}

2. RBG转HSI代码

#define H_RANGE_1                    25
#define H_RANGE_2                   300Mat srcImage = imread(SRC_IMAGE, 1);
imshow(WIMDOW_NAME, srcImage);
Mat img_HSI;
img_HSI.create(srcImage.rows, srcImage.cols, CV_8UC3);
Mat img_Out;
img_Out.create(srcImage.rows, srcImage.cols, CV_8UC3);//srcImage to img_HSI
for (int i = 0; i < srcImage.rows; i++) {for (int j = 0; j < srcImage.cols; j++) {double b = (double)srcImage.at<Vec3b>(i, j)[0] / 255;double g = (double)srcImage.at<Vec3b>(i, j)[1] / 255;double r = (double)srcImage.at<Vec3b>(i, j)[2] / 255;double H, S, I;double num = 0.5 * ((r - g) + (r - b));double den = sqrt((r - g) * (r - g) + (r - b) * (g - b));if (den == 0){H = 0;}else{double theta = acos(num / den);H = 360 * theta / (PI * 2);if (b > g){H = 360 - H;}}double minRGB = min(min(r, g), b);den = r + g + b;if (den == 0){S = 0;}else{S = 1 - 3.0 * minRGB / den;}I = den / 3.0;img_HSI.at<Vec3b>(i, j)[0] = H / 360 * 255;img_HSI.at<Vec3b>(i, j)[1] = S * 255;img_HSI.at<Vec3b>(i, j)[2] = I * 255;}
}
imshow("HSI", img_HSI);

3. HSI转RBG,提取红色

注意: 因为白色的色调也在红色范围,所以需要用饱和度来排除白色

//img_HSI to img_Out
for (int i = 0; i < srcImage.rows; i++) {for (int j = 0; j < srcImage.cols; j++) {double H = (double)img_HSI.at<Vec3b>(i, j)[0] / 255 * 360;double S = (double)img_HSI.at<Vec3b>(i, j)[1] / 255;double I = (double)img_HSI.at<Vec3b>(i, j)[2] / 255;double R = 0, G = 0, B = 0;if (H >= H_RANGE_1 && H < H_RANGE_2){H = 0;S = 0;I = 0;}if (S < 0.2) //用饱和度排除白色{H = 0;S = 0;I = 0;}if (H > 0 && H < 120){B = I * (1 - S);R = I * (1 + (S * cos(H * PI / 180)) / (cos((60 - H) * PI / 180)));G = 3 * I - (R + B);}else if (H >= 120 && H < 240){H = H - 120;R = I * (1 - S);G = I * (1 + (S * cos(H * PI / 180)) / (cos((60 - H) * PI / 180)));B = 3 * I - (R + G);}else if (H >= 240 && H < 360){H = H - 240;G = I * (1 - S);B = I * (1 + (S * cos(H * PI / 180)) / (cos((60 - H) * PI / 180)));R = 3 * I - (G + B);}img_Out.at<Vec3b>(i, j)[0] = B * 255;img_Out.at<Vec3b>(i, j)[1] = G * 255;img_Out.at<Vec3b>(i, j)[2] = R * 255;}
}
imshow("Out", img_Out);

4. 效果

七、使用OpenCV徒手实现:RGB转HSI,并提取红色相关推荐

  1. (OpenCV+Python)--RGB转HSI

    cv2.cvtColor函数封装了各种颜色空间之间的转换,唯独没有RGB与HSI之间的转换,网上查来查去也只有C++或MATLAB版本的,自己要用到python里,所以就写写python版本的. HS ...

  2. OpenCV 颜色空间RGB 到HSI CMYK的转换 C++

    从RGB 到 HSI 的空间转换 给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到: 其中 等于 饱和度分量由下式给出: 强度分量下式得出: 上式已假定RGB归一化到[0-1],且角度 ...

  3. 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换

    RGB to HSI.CMYK的代码实现 前言: 在之前博文的基础上,我使用OpenCV2实现了RGB颜色空间向HIS.CMYK转换的代码.下列链接为各种经典颜色空间的介绍及转换公式的介绍. http ...

  4. OpenCV4机器学习(三):颜色空间(RGB、HSI、HSV、Lab、Gray)之间的转换

    前言: 本专栏主要结合OpenCV4(C++版本),来实现一些基本的图像处理操作.经典的机器学习算法(比如K-Means.KNN.SVM.决策树.贝叶斯分类器等),以及常用的深度学习算法. 系列文章: ...

  5. hsi转rgb公式matlab,rgb与hsi模型转换matlab程序

    rgb与hsi模型转换matlab程序 数字图像处理:RGB与HSI模型转换Matlab程序 im1=imread( Fig6.30(01).jpg ); im3=im1; im1=im2double ...

  6. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV

    Python Opencv转换颜色空间 RGB转为HSV 举个例子,通过摄像头把视频中的蓝色区域凸显出来,剩余的颜色均为黑色 import numpy as npcap = cv2.VideoCapt ...

  7. matlab bmp hsi,matlab中RGB与HSI图像转化

    姓名:边颖超 学号:19021210974 编程实现RGB与HSI彩色空间的转换,将一幅彩色图像分解为H.S.I三个分量,并显示这三个分量所对应的灰度图像. (1)利用imread函数读入灰度图片hu ...

  8. matlab显示hsi,matlab实现RGB与HSI的相互转换

    %将RGB图像转换为HSI图像 % 显示HSI图像 %直方图均衡化HSI图像 %将HSI图像转换回RGB图像 function rgbtohsi(x) F=imread(x); F=im2double ...

  9. matlab hsi颜色空间,RGB与HSI颜色空间互换函数(matlab)

    近看了一本数字图像处理的原版书.其中提供了RGB与HSI颜色空间之间的相互转变函数.已在matlab7.0中测试成功.不敢独享,贴出来供大家参考. function hsi=rgb2hsi(rgb) ...

最新文章

  1. 最简单的 SAP Cloud Application programming CDS 练习
  2. 【模型加速】TensorRT安装、测试及常见问题
  3. linux 查看jvm虚拟内存_看完你还敢说你懂JVM吗?
  4. java datasource mysql_java – 添加新的Datasource(mysql)wildfly
  5. 如何优雅地编码文本中的位置信息?三种positioanl encoding方法简述
  6. 有助于提高锁性能的几点建议
  7. 人工搜索文字不可靠,还是要使用工具
  8. mybatis-generator自动生成代码(lombok带注释)
  9. java 枚举 排序_基于枚举常量的Java排序
  10. 无人机倾斜摄影三维建模技术在智慧城市中的应用
  11. PR基础学习(四) 简单裁剪视频
  12. pandas学习之excel重复项判断显示与去重
  13. java实现图片拼接
  14. 一文搞懂F.binary_cross_entropy以及weight参数
  15. 用计算机弹无羁的数字,无羁钢琴谱数字双手波尔卡教
  16. MPLS 次末跳弹出配置_中东版2019款三菱帕杰罗V97配置详情介绍
  17. 乒乓球重拍轻拍怎么选
  18. 雷军:从苦逼撸代码到年入上百亿,成为商界领袖,改变现状,只靠单纯写代码远远不够
  19. 国际快递清关要多少时间,国际快递进口如何清关2021.12.01
  20. STM32F030C8T6单片机与GY-61 ADXL335模块——角度传感器

热门文章

  1. Centos7 Apache结合tomcat实现动静分离
  2. 八百呼电话录音系统--让通讯管理更安心
  3. C语言获取股票数据,c/c++开发分享获取贵州茅台2010年1月1号至今的股票交易数据,计算该股票历史数据的5日均线和30日均线...
  4. 客制化键盘编程_最全最细客制化键盘指南!(上)
  5. 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(九)---制作APP
  6. 2021年湖南省高考体考成绩查询,2021年湖南体育专业考试成绩查询网址:http://jyt.hunan.gov.cn/...
  7. 程序员也学点财报--《一本书读懂财报》脑图
  8. 如何设置计算机自动连接宽带,宽带自动连接设置,教您电脑怎么设置宽带自动连接...
  9. 海通证券否认获批试点 融资融券再度忽悠券商股
  10. 续篇( 一) TCP 为什么是三次握手,四次挥手?