[c++]opencv实现RGB和HSI的相互转换

news/2024/2/29 4:17:34

文章目录

  • 公式
    • RGB转HSI
    • HSI转RGB
  • RGB转HSI代码
  • HSI转RGB代码
  • 示例

公式

HSI彩色模型就是色调(hub)、饱和度(saturation)、亮度(intensity)

  • 色调:描述纯色(纯黄色、纯蓝色之类)的颜色属性
  • 饱和度:描述一种纯色被白光稀释的程度
  • 亮度:即强度(类似灰度级的感觉)

以下公式来源论文《Color image enhancement with exact HSI color model》

RGB转HSI

I = R + G + B 3 I=\frac{R+G+B}{3} I=3R+G+B
H = { θ , if  B ≤ G 36 0 ∘ − θ , if  B > G 其 中 θ = cos ⁡ − 1 { 1 2 [ ( R − G ) + ( R − B ) ] [ ( R − G ) 2 + ( R − B ) ( G − B ) ] 1 / 2 } H=\left\{\begin{array}{ll} \theta, & \text { if } B \leq G \\ 360^{\circ}-\theta, & \text { if } B>G \end{array}\right. \\其中 \theta=\cos ^{-1}\left\{\frac{\frac{1}{2}[(R-G)+(R-B)]}{\left[(R-G)^{2}+(R-B)(G-B)\right]^{1 / 2}}\right\} H={θ,360θ, if BG if B>Gθ=cos1{[(RG)2+(RB)(GB)]1/221[(RG)+(RB)]}
S = 1 − 3 min ⁡ ( R , G , B ) R + G + B S=1-\frac{3\min (R, G, B)}{R+G+B} S=1R+G+B3min(R,G,B)

HSI转RGB

  • 0 ∘ ≤ H < 12 0 ∘ 0^{\circ} \leq H<120^{\circ} 0H<120
    B = I ( 1 − S ) R = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] G = 3 I − ( R + B ) \begin{aligned} B &=I(1-S) \\ R &=I\left[1+\frac{S \cos H}{\cos \left(60^{\circ}-H\right)}\right] \\ G &=3 I-(R+B) \end{aligned} BRG=I(1S)=I[1+cos(60H)ScosH]=3I(R+B)
  • 12 0 ∘ ≤ H < 24 0 ∘ 120^{\circ} \leq H<240^{\circ} 120H<240
    H = H − 24 0 ∘ R = I ( 1 − S ) G = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] B = 3 I − ( R + G ) \begin{aligned} H&=H-240^{\circ}\\ R &=I(1-S) \\ G &=I\left[1+\frac{S \cos H}{\cos \left(60^{\circ}-H\right)}\right] \\ B &=3 I-(R+G) \end{aligned} HRGB=H240=I(1S)=I[1+cos(60H)ScosH]=3I(R+G)
  • 24 0 ∘ ≤ H < 36 0 ∘ 240^{\circ} \leq H<360^{\circ} 240H<360
    H = H − 24 0 ∘ G = I ( 1 − S ) B = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] R = 3 I − ( G + B ) \begin{aligned} H &=H-240^{\circ}\\ G & =I(1-S) \\ B &=I\left[1+\frac{S \cos H}{\cos \left(60^{\circ}-H\right)}\right] \\ R &=3 I-(G+B) \end{aligned} HGBR=H240=I(1S)=I[1+cos(60H)ScosH]=3I(G+B)

RGB转HSI代码

Mat RGB2HSI(const Mat & rgb){Mat hsi(rgb.rows, rgb.cols, rgb.type());float  H=0, S=0, I=0;for(int i=0; i < rgb.rows; i++)for(int j=0; j < rgb.cols; j++){float B = rgb.at<Vec3b>(i, j)[0] / 255.f,G = rgb.at<Vec3b>(i, j)[1] / 255.f,R = rgb.at<Vec3b>(i, j)[2] / 255.f;float num = (R - G + R - B) / 2,den = sqrt((R - G) * (R - G) + (R - B) * (G - B)),theta = acos(num/den);if(den == 0) H = 0; // 分母不能为0else H = B <= G ? theta / (2 * MY_PI) : 1 - theta / (2 * MY_PI);float sum = B + G + R;if(sum == 0) S = 0;else S = 1 - 3 * min(min(B, G), R) / sum;I = sum/3.0;hsi.at<Vec3b>(i, j)[0] = H*255;hsi.at<Vec3b>(i, j)[1] = S*255;hsi.at<Vec3b>(i, j)[2] = I*255;}return hsi;
}

HSI转RGB代码

Mat HSI2RGB(const Mat & hsi){Mat rgb(hsi.rows, hsi.cols, hsi.type());float  R=0,G=0,B=0;for(int i=0; i < hsi.rows; i++)for(int j=0; j < hsi.cols; j++){float H = hsi.at<Vec3b>(i, j)[0] / 255.f * 2 * MY_PI,S = hsi.at<Vec3b>(i, j)[1] / 255.f,I = hsi.at<Vec3b>(i, j)[2] / 255.f;if(H < 120.f * MY_PI / 180.f){B=I*(1-S);R=I*(1+ S*cos(H)/cos(60.f* MY_PI / 180.f-H));G=3*I-R-B;}else if(H >= 120.f * MY_PI / 180.f && H < 240 * MY_PI / 180.f){H-=(120.f * MY_PI / 180.f);R=I*(1-S);G=I*(1+ S*cos(H)/cos(60.f* MY_PI / 180.f-H));B=3*I-R-G;}else if(H >= 240.f * MY_PI / 180.f){H-=(240.f * MY_PI / 180.f);G=I*(1-S);B=I*(1+ S*cos(H)/cos(60.f* MY_PI / 180.f-H));R=3*I-B-G;}rgb.at<Vec3b>(i, j)[0] = B*255;rgb.at<Vec3b>(i, j)[1] = G*255;rgb.at<Vec3b>(i, j)[2] = R*255;}return rgb;
}

示例

#include<iostream>
#include <opencv2/opencv.hpp>
#define MY_PI 3.1415
using namespace std;
using namespace cv;
Mat RGB2HSI(const Mat & rgb);
Mat HSI2RGB(const Mat & hsi);
int main(int argc, char * argv[]){Mat img = imread("../image/RGB.jpg");imshow("origin", img);waitKey();Mat hsi = RGB2HSI(img);imshow("hsi", hsi);waitKey();Mat rgb=HSI2RGB(hsi);imshow("rgb", rgb);waitKey();return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/558093.html

相关文章

suse nginx 安装mysql_nginx+php+mysql+erlang+mongo环境安装

---------------- 把源码包放在/usr/local/tar/目录下--------------------------------------------------------------------------- ---------centos 是用yum安装 &#xff0c;suse 是用yast --install 安装 yum -y install gcc yum -y install gcc-c yum -y install ncurse…

Matlab数字图像处理学习记录【5】——彩色图像处理

彩色图像处理 一.Matlab中彩色图像的表示方法1.1RGB图像1.2索引图像1.3用来处理RGB图像或索引图像的IPT函数 二.转换值其他彩色空间2.1NTSC彩色空间2.2YCbCr彩色空间2.3HSV色彩空间2.4CMY和CMYK彩色空间2.5 HSI彩色空间 三.彩色图像处理基础四.彩色变换五.彩色图像的空间滤波5.…

数据仓库4.0

仅用于自己学习 数据流程设计 搭建 版本选择 Apache :运维麻烦&#xff0c;组件间兼容性需要自己调研 CDH&#xff1a; 国内使用最多的版本&#xff0c;6.32之前免费&#xff0c;从2021年开始收费。 1个节点1万美元 云服务选择 阿里云的EMR(不用搭建平台和考虑兼容性问题…

Spring Web工程web.xml零配置即使用Java Config + Annotation

摘要: 在Spring 3.0之前&#xff0c;我们工程中常用Bean都是通过XML形式的文件注解的&#xff0c;少了还可以&#xff0c;但是数量多&#xff0c;关系复杂到后期就很难维护了&#xff0c;所以在3.x之后Spring官方推荐使用Java Config方式去替换以前冗余的XML格式文件的配置方式…

开源地址

开源中国&#xff1a;http://www.oschina.net/project/zh csdn专访&#xff1a;http://blog.csdn.net/blogdevteam/article/list/2 iteye&#xff1a;http://www.iteye.com/magazines/ java快速开发平台&#xff0c;java二次开发平台 G4Studio fastunit java-hi beetl o…

腾讯云检测到你的服务器对其他服务器的攻击行为

某天突然收到腾讯云的邮件说我是在攻击别人 第一时间反应是我的服务器被入侵当作肉鸡了&#xff0c;然后排查ssh有没有被破解&#xff0c;全盘扫描病毒&#xff0c;检测任务计划&#xff0c;进程等&#xff0c;结果没有什么异常。 第二天打开自己家的路由器发现内网穿透客户端…

宇视警戒球智能跟踪功能配置方法

警戒球智能跟踪功能 名词解释: 智能跟踪&#xff1a;当有人进入监控区域时&#xff0c;警戒球会锁定目标&#xff0c;持续跟踪。常用于少有人出现的场所&#xff0c;可以大大解决巡视难的问题。#本功能可单机使用# 支持的型号&#xff1a;宇视警戒球全系列产品 智能跟踪功能…

服务器被检测出挖矿

有位朋友说&#xff0c;他服务器使用的好好的&#xff0c;服务商突然封了他服务器&#xff0c;说是被检测出挖矿&#xff0c;这位朋友一脸懵“我开游戏的&#xff0c;挖什么矿”。突然地关停服务器导致这位朋友损失惨重&#xff0c;那么为什么会被检测出挖矿&#xff0c;以及怎…

服务器被打了要报警嘛

游戏服务器在现如今电子竞技发达的今天越发火爆&#xff0c;但是被攻击也是很常见的&#xff0c;特别事游戏新上线时&#xff0c;都要承受的住外来压力&#xff0c;玩家数量的激增&#xff0c;被黑客攻击等等。在这里我来说说游戏服务器为什么老被攻击和怎么防御恶意攻击。 游…

选择高防服务器的重要性 ,游戏行业必看

选择高防服务器的重要性&#xff01;游戏行业必看&#xff01;&#xff01;&#xff01; 众所周知高防服务器比普通服务器更好&#xff0c;但意味着价格更贵&#xff0c;那么选择高防服务器有哪些好处呢&#xff1f;因为流水量大&#xff0c;现金流动迅速&#xff0c;游戏行业…

记录一次云服务器被劫持下载了挖矿病毒的处理过程

etc被篡改导致系统中病毒 起因: 一年前买的阿里云服务器 , 买了没多久 , 因为没做什么安全措施 , 然后就莫名奇妙服务器被劫持 , 在上面下载了挖矿的一些脚本 ,当时做的处理方式 简单粗暴 直接重置了我的阿里云服务器 , 并且改了密码 , 同时在阿里云的服务器控制台 -> 安全…

排查腾讯云服务器被挖矿病毒【pnscan】挟持

一、问题发现 最新在使用腾讯云部署项目应用&#xff0c;具体方式为docker部署。今天早上发现腾讯云发来一条报警信息&#xff1a; 看到信息中说到攻击行为&#xff0c;怀疑是否中了病毒&#xff0c;决定排查一下问题。 二、排查过程 首先登录腾讯云服务器控制台&#xff0…

关于云服务器被挖矿病毒入侵这件事的经过

2021-12-30 0点35分 手机微信&#xff0c;腾讯云助手收到了一条通知&#xff0c;是这样的 点进去一看&#xff0c;好家伙&#xff0c;攻击其他服务器端口&#xff1f;&#xff1f;&#xff1f;&#xff08;囧&#xff09;这事儿咱可没做过&#xff0c;但是呢&#xff0c;出于…

关于监控服务器指标、CPU、内存、警报的一些解决方案

文章目录 关于监控服务器指标、CPU、内存、警报的一些解决方案Prometheus Grafana 配置 IRIS / Cach 监控服务器Prometheus简介特点架构图 Grafana简介特点 配置流程 自定义Prometheus接口定义配置 Exporter 监控服务器系统资源简介配置流程 使用 Alertmanager报警简介配置流程…

等保2.0服务器测评-身份鉴别测评方法以及配置整改-01

等保2.0服务器测评-身份鉴别 声明&#xff1a; 测评要求参考《信息安全技术 网络安全等级保护测评要求GB/T 28448一2019》 测评方法以及配置整改为个人工总结&#xff0c;仅供参考不适用全部操作系统&#xff0c;有不合理的地方大家多多指出&#xff0c;欢迎交流。 测评项 a…

揭秘游戏服务器,不看后悔!!!

目录 前言 1、常见游戏模块 2、开发语言与项目构建发布

腾讯云服务器被黑客攻击的解决办法

腾讯云被黑客攻击,删我数据库了,后台查看还在不断破解我的密码 来黑,来骗,我一个马上奔三的程序员,耗子尾汁 但是,话说我数据库密码root&#xff0c;有点不尊重黑客了 直接重装系统 检查Linux的是否被黑的几个命令 tail -f /var/log/secure 动态查看登录信息last 查…

网警如何查虚拟服务器,网警查高防云服务器

网警查高防云服务器 内容精选 换一换 云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。本节操作介绍无法登录Linux弹性云服务器的排查思路。当您的云服务器无法远程登录时&#xff0c;我们建议您首先检查是否可以通…

快速检测服务器漏洞

Shodan是互联网上最可怕的搜索引擎 CNNMoney的一篇文章写道&#xff0c;虽然目前人们都认为谷歌是最强劲的搜索引擎&#xff0c;但Shodan才是互联网上最可怕的搜索引擎。 与谷歌不同的是&#xff0c;Shodan不是在网上搜索网址&#xff0c;而是直接进入互联网的背后通道。Shod…

今年全网活跃得高危漏洞跟踪记录表

第一季度 2020 年一季度&#xff08;1 月-3 月&#xff09;&#xff0c;安恒应急响应中心公众号共发了 15 篇高危漏洞风 险提示&#xff0c;其中 3 篇提供了漏洞验证截图&#xff0c;3 篇提供了全球网络空间受影响资产测绘数 据。年初&#xff0c;由于新冠疫情&#xff08;COV…
最新文章