当前位置: 首页 > news >正文

数字图像处理—— Lab、YCbCr、HSV、RGB之间互转

Lab

“Lab” 图像格式通常指的是 CIELAB 色彩空间,也称为 Lab 色彩空间。它是一种用于描述人类视觉感知的颜色的设备无关色彩空间,与常见的 RGB 和 CMYK 色彩空间不同。CIELAB 由国际照明委员会(CIE)于1976年定义,用于更准确地表示人眼对色彩的感知。
CIELAB 包括三个通道:L(亮度)、a(从绿色到红色的颜色分量)和b(从蓝色到黄色的颜色分量)。这种色彩空间的主要优势在于,它试图模拟人眼对色彩的感知方式,使得在 Lab 空间中更接近的颜色在视觉上也更相似。这使得 Lab 色彩空间在许多颜色相关的应用中很有用,如图像处理、颜色校正和颜色匹配等。
然而,需要注意的是,Lab 图像格式本身并不是一种常见的图像文件格式,如 JPEG、PNG 或 GIF。相反,Lab 色彩空间通常是用于图像处理中的中间色彩空间,以帮助进行颜色校正、色彩调整和其他颜色相关的操作。要在计算机上表示 Lab 色彩空间,通常会使用浮点数值表示 L、a 和 b 通道的值。
在这里插入图片描述

YCbCr

YCbCr 是一种用于数字图像和视频编码的颜色空间,它与 RGB 颜色空间不同。YCbCr 通常用于图像和视频压缩、传输以及数字媒体处理中,因为它具有对人眼感知不同的颜色和亮度信息分离的特性,这样可以在保持视觉质量的前提下减少数据传输量。
YCbCr 由三个分量组成:
Y(亮度):表示图像的明亮度分量。这个分量对应于人眼对图像的亮度感知。
Cb 和 Cr(色差):这两个分量表示颜色信息中的色度或色差分量。Cb 表示蓝色和亮度之间的差异,而 Cr 表示红色和亮度之间的差异。这种分离允许将色彩信息与亮度信息分开,从而在不显著影响视觉感知的情况下进行压缩。
YCbCr 被广泛用于数字媒体技术中,例如 JPEG 图像压缩、视频编码(如 MPEG 和 H.264)以及数字电视广播中。许多图像和视频格式都使用 YCbCr 色彩空间来存储数据,因为它在保留图像质量的同时可以减少存储和传输的数据量。在这些格式中,图像的颜色信息被映射到 Cb 和 Cr 通道,而亮度信息保留在 Y 通道中。
在这里插入图片描述

HSV

它基于人类视觉系统对颜色的感知方式,与 RGB 和 CMYK 色彩空间不同。HSV 代表色相(Hue)、饱和度(Saturation)和亮度(Value),它提供了一种直观的方式来描述颜色的不同方面。
以下是 HSV 色彩空间的三个分量:

  1. 色相(Hue):色相表示颜色的基本属性,即我们常说的颜色名称,如红色、绿色、蓝色等。色相的取值范围通常为 0 到 360
    度,将整个颜色环划分为不同的颜色。
  2. 饱和度(Saturation):饱和度表示颜色的纯度或鲜艳程度。饱和度较低的颜色会更加灰暗或淡化,而高饱和度的颜色更加鲜艳。饱和度的取值范围通常为0%(灰色)到 100%(完全饱和)。
  3. 亮度(Value):亮度表示颜色的明暗程度。较高的亮度值表示颜色较亮,而较低的值表示颜色较暗。亮度的取值范围通常为 0%(黑色)到100%(白色)。
    HSV 色彩空间通常在图像处理和计算机图形学中使用,因为它提供了更直观的控制颜色外观的方式。与 RGB 色彩空间相比,HSV 更适合用于调整颜色的饱和度和明暗程度,而不必考虑颜色之间的复杂交互影响。
    在这里插入图片描述

代码

首先先定义这些颜色空间的数据结构,为了方便读写图像,这里使用OpenCV来读入图像,读入之后把BGR转成RGB。

#pragma once
#include <iostream>
#include <algorithm>
#include <opencv2/opencv.hpp>
struct Lab
{float L;float a;float b;
};struct YCbCr
{float Y;float Cb;float Cr;
};struct HSV
{int h;double s;double v;
};struct BGR
{float b;float g;float r;
};

实现代码

void BGR_YCbCr(BGR &bgr, YCbCr& y)
{y.Y = 0.257 * bgr.r + 0.564 * bgr.g + 0.098 * bgr.b + 16;y.Cb = -0.148 * bgr.r - 0.291 * bgr.g + 0.439 * bgr.b + 128;y.Cr = 0.439 * bgr.r - 0.368 * bgr.g - 0.071 * bgr.b + 128;
}void BGR_Lab(BGR &bgr, Lab& lab)
{double X, Y, Z;double Fx = 0, Fy = 0, Fz = 0;double b = bgr.b / 255.00;double g = bgr.g / 255.00;double r = bgr.r / 255.00;// gamma 2.2if (r > 0.04045)r = pow((r + 0.055) / 1.055, 2.4);elser = r / 12.92;if (g > 0.04045)g = pow((g + 0.055) / 1.055, 2.4);elseg = g / 12.92;if (b > 0.04045)b = pow((b + 0.055) / 1.055, 2.4);elseb = b / 12.92;// sRGBX = r * 0.436052025 + g * 0.385081593 + b * 0.143087414;Y = r * 0.222491598 + g * 0.716886060 + b * 0.060621486;Z = r * 0.013929122 + g * 0.097097002 + b * 0.714185470;// XYZ range: 0~100X = X * 100.000;Y = Y * 100.000;Z = Z * 100.000;// Reference White Point//2度视场 D50光源三刺激值double ref_X = 96.4221;double ref_Y = 100.000;double ref_Z = 82.5211;X = X / ref_X;Y = Y / ref_Y;Z = Z / ref_Z;// Labif (X > 0.008856)Fx = pow(X, 1 / 3.000);elseFx = (7.787 * X) + (16 / 116.000);if (Z > 0.008856)Fz = pow(Z, 1 / 3.000);elseFz = (7.787 * Z) + (16 / 116.000);if (Y > 0.008856){Fy = pow(Y, 1 / 3.000);lab.L = (116.000 * Fy) - 16.0 + 0.5;}else{Fy = (7.787 * Y) + (16 / 116.000);lab.L = 903.3 * Y;}lab.a = 500.000 * (Fx - Fy) + 0.5;lab.b = 200.000 * (Fy - Fz) + 0.5;
}bool IsEquals(double val1, double val2)
{return fabs(val1 - val2) < 0.001;
}void BGR_HSV(BGR& bgr, HSV& hsv)
{double b, g, r;double h, s, v;double min, max;double delta;b = bgr.b / 255.0;g = bgr.g / 255.0;r = bgr.r / 255.0;if (r > g){max = std::max(r, b);min = std::min(g, b);}else{max = std::max(g, b);min = std::min(r, b);}v = max;delta = max - min;if (IsEquals(max, 0))s = 0.0;elses = delta / max;if (max == min)h = 0.0;else{if (IsEquals(r, max) && g >= b){h = 60 * (g - b) / delta + 0;}else if (IsEquals(r, max) && g < b){h = 60 * (g - b) / delta + 360;}else if (IsEquals(g, max)){h = 60 * (b - r) / delta + 120;}else if (IsEquals(b, max)){h = 60 * (r - g) / delta + 240;}}hsv.h = (int)(h + 0.5);hsv.h = (hsv.h > 359) ? (hsv.h - 360) : hsv.h;hsv.h = (hsv.h < 0) ? (hsv.h + 360) : hsv.h;hsv.s = s;hsv.v = v;
}BGR BGR_value(cv::Mat& cv_src)
{cv::Scalar s = cv::mean(cv_src);BGR bgr;bgr.b = s[0];bgr.g = s[1];bgr.r = s[2];return bgr;
}

相关文章:

数字图像处理—— Lab、YCbCr、HSV、RGB之间互转

Lab “Lab” 图像格式通常指的是 CIELAB 色彩空间&#xff0c;也称为 Lab 色彩空间。它是一种用于描述人类视觉感知的颜色的设备无关色彩空间&#xff0c;与常见的 RGB 和 CMYK 色彩空间不同。CIELAB 由国际照明委员会&#xff08;CIE&#xff09;于1976年定义&#xff0c;用于…...

自动驾驶SLAM技术第四章习题2

在g2o的基础上改成ceres优化&#xff0c;高博都写好了其他的部分, 后面改ceres就很简单了. 这块我用的是ceres的自动求导&#xff0c;很方便&#xff0c;就是转化为模板仿函数的时候有点麻烦&#xff0c; 代码部分如下 ceres_type.h : ceres优化核心库的头文件 这个文件写的内…...

vue拖拽div盒子实现上下拖动互换

vue拖拽div盒子实现上下拖动互换 <div v-for"(item, index) in formList" :key"index" draggable"true"dragstart"handleDragStart($event, item)"dragenter"handleDragEnter($event, item)"dragover.prevent"han…...

Visual Studio 2022 右键单击项目没有出现View | View Class Diagram(Visual Studio 无法使用类设计器)

文章目录 问题描述原因.NET Core项目.NET Framework项目 问题描述 当我们在Solution Explorer窗口右键单击项目时&#xff0c;快捷菜单中没有出现“查看”&#xff0c;或者出现了“查看”&#xff0c;但是“查看”里没有View Class Diagram。 原因 首先你要确保你安装了类设…...

EFCore常见用法

EFCore官方文档置顶&#xff0c;看这个就行。下面的内容只是总结&#xff0c;算是备忘录。 一、创建和删除 //1、创建数据库和表 db.Database.EnsureCreated();//将创建数据库&#xff08;如果不存在&#xff09;并初始化数据库架构。 如果存在任何表 (包括另一 DbContext 类)…...

概率论与数理统计:第六章:数理统计

文章目录 Ch6. 数理统计(一) 总体与样本(二) 统计量 (5个)2.5个常用统计量3.矩的概念 (三) 抽样分布 (3个)0.上α分位点1.χ分布2.t分布3.F分布 (四) 抽样分布定理1.单个正态总体2.两个正态总体 Ch6. 数理统计 (一) 总体与样本 1.概念&#xff1a; (1)总体 (2)样本 简单随机…...

拥塞控制(TCP限制窗口大小的机制)

拥塞控制机制可以使滑动窗口在保证可靠性的前提下&#xff0c;提高传输效率 关于滑动窗口的属性以及部分机制推荐看TCP中窗口和滑动窗口的含义以及流量控制 拥塞控制出现的原因 看了上面推荐的博客我们已经知道了&#xff0c;由于接收方接收数据的能力有限&#xff0c;所以要通…...

校园供水系统智能管理

import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…...

Flask-SocketIO和Flask-Login联合开发socketio权限系统

设置 Flask, Flask-SocketIO, Flask-Login: 首先&#xff0c;确保安装了必要的库: pip install Flask Flask-SocketIO Flask-Login基础设置: from flask import Flask, render_template, redirect, url_for, request from flask_socketio import SocketIO, emit from flask_…...

航空电子设备中的TSN通讯架构—直升机

前言 以太网正在迅速取代传统网络&#xff0c;成为航空电子设备和任务系统的核心高速网络。本文提出了以太网时间敏感网络(TSN)在航空电子设备上应用的技术优势问题。在实际应用中&#xff0c;TSN已成为一个具有丰富的机制和协议的工具箱&#xff0c;可满足与时间和可靠性相关…...

elment-ui中使用el-steps案例

el-steps案例 样式 代码 <div class"active-box"><div class"active-title">请完善</div><el-steps :active"active" finish-status"success" align-center><el-step title"第一步" /><…...

FPGA解析串口指令控制spi flash完成连续写、读、擦除数据

前言 最近在收拾抽屉时找到一个某宝的spi flash模块&#xff0c;如下图所示&#xff0c;我就想用能不能串口来读写flash&#xff0c;大致过程就是&#xff0c;串口向fpga发送一条指令&#xff0c;fpga解析出指令控制flah&#xff0c;这个指令协议目前就是&#xff1a; 55 AA …...

msvcp120.dll丢失的解决方法,分享三种快速修复的方法

今天&#xff0c;我将和大家分享一个关于电脑问题的解决方法——msvcp120.dll丢失的解决方法。希望对大家有所帮助。 首先&#xff0c;让我们来了解一下msvcp120.dll文件。msvcp120.dll是Microsoft Visual C 2010 Redistributable Package的一个组件&#xff0c;它包含了一些运…...

mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

sql server 序号函数 序号函数 ROW_NUMBER() 顺序排序RANK() 并列排序&#xff0c;会跳过重复的序号&#xff0c;比如序号为1&#xff0c;1&#xff0c;3DENSE_RANK() 并列排序&#xff0c;不会跳过重复的序号&#xff0c;比如 序号为 1&#xff0c;1&#xff0c;2 语法结构…...

fastgpt构建镜像

1.把client目录复制到服务器 .next和node_modules文件夹不用上传到服务器 在服务器目录运行 docker build -t fastgpt:1.0.3 . 构建服务 再运行 docker ps 就可以看到容器了...

Git笔记--分支常用命令

目录 1--git branch -v 2--git branch 3--git checkout 4--git merge 1--git branch -v git branch -v git branch -v 用于查看分支版本&#xff1b; 2--git branch git branch xxxxx # xxxxx表示分支名 git branch 用于创建分支&#xff1b; 3--git checkout git check…...

常见设计模式学习+面试总结

一 设计模式简介 二 面试总结 1 什么是单例模式&#xff1f;都有哪些地方用到单例&#xff1f; 内存中只会创建且仅创建一次对象的设计模式&#xff0c;保证一个类只有一个实例&#xff0c;并且提供一个访问该全局访问点。 应用场景&#xff1a; 网站的计数器&#xff0c;一般…...

sql解决取多个截至每个月的数据

问题&#xff1a;需要查询1月、1-2月、1-3月… 1-12月&#xff0c;分区间的累计数据&#xff0c;在同一个sql语句里面实现。 多个分开查询效率不高&#xff0c;并且数据手动合并麻烦。 with t1 as ( SELECT *,CASE WHEN insutype 390 THEN 居民 ELSE 职工 END 人员类别,SUBST…...

数据采集:selenium 获取 CDN 厂家各省市节点 IP

写在前面 工作需要遇到&#xff0c;简单整理理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#xff0c;是对…...

【el-tree】树形组件图标的自定义

饿了么树形组件的图标自定义 默认样式: 可以看到el-tree组件左侧自带展开与收起图标,咱们可以把它隐藏:: .groupList {::v-deep .el-tree-node { .el-icon-caret-right {display: none;} } } 我的全部代码 <div class"groupList"><el…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...