YIQ颜色空间_简述RGB颜色

YIQ颜色空间_简述RGB颜色首先,我们先来了解下有关颜色的基本概念一、色彩的基本概念1、彩色的三要素亮度:即人眼对光的明亮程度的感受。色调:人眼能看到的颜色种类,与光的波长有关饱和度:颜色深浅程度。与各种颜色混入白光的比例有关。以上色调+饱和度=色度2、三基色原理三基色可以通过适当比例的混合组成自然界中任何一种颜色由于人眼对于红绿蓝三种色光最为敏感,并且由这三种颜色能组成的颜色范围最广,故一般选用…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

首先,我们先来了解下有关颜色的基本概念

一、色彩的基本概念

1、彩色的三要素
亮度:即人眼对光的明亮程度的感受。
色调:人眼能看到的颜色种类,与光的波长有关
饱和度:颜色深浅程度。与各种颜色混入白光的比例有关。
以上 色调 + 饱和度 = 色度

2、三基色原理
三基色可以通过适当比例的混合组成自然界中任何一种颜色

由于人眼对于红绿蓝三种色光最为敏感,并且由这三种颜色能组成的颜色范围最广,故一般选用RGB作为三基色

但是,三基色并不是唯一的,只要满足任何一种颜色都不能由其他两种颜色合成即可组成三基色。例如,我们还可以用黄色,品红,青色组成三基色。

3、亮度的组成

4、常用的四种颜色空间

  • A、RGB颜色空间
    RGB彩色空间利用相加混合法将三个彩色分量按照不同的比例叠加,最终就可以在屏幕中显现出各种颜色。
    在这里插入图片描述任意的彩色光F都有一个配色的公式:F = r[R]+g[G]+b[B]
    式中r,g,b为系数,r+g+b=1。故,知其二便可唯一确定色调。

  • B、YUV颜色空间
    研究表面,人眼对于亮度的敏感度远大于对于颜色细节的敏感度,因此,才彩色电视机系统中不采用RGB颜色空间,一般为以下的空间:
    在这里插入图片描述

采用YUV颜色空间的好处有:

a、解决了彩色电视机和黑白电视机的兼容问题(因为黑白电视机只需要提取信号中的Y信号即可显示出来)

b、可以节省传输带宽
一般情况下,数字化后的
Y:U:V = 8:4:4或者Y:U:V = 8:2:2,即亮度信号Y需要8比特表示,UV需要4个或者2个比特表示,我们知道,RGB颜色空间下,需要24比特来表示一个颜色,而利用YUV则仅需要16比特或者12比特,达到压缩的目的。

在PAL制下,白光亮度Y和红绿蓝三色光的关系可以用以下公式表示:
Y = 0.222R + 0.707G + 0.071B
在NTSC制下,Y=0.299R+0.587G+0.114B

色差U,即蓝基色分量与亮度的差值信号,可以用以下公式表示:
U = k1(B – Y)
色差V,即红基色分量与亮度的差值信号,可以用以下公式表示:
V = k2(R – Y)
通常,k1 = 0.493,k2 = 0.877

YUV颜色空间与RGB颜色空间的转换
在这里插入图片描述

  • C、YIQ颜色空间

如上图所示,YIQ颜色空间被NTSC制的彩色电视机使用。
其中Y还是亮度信号,用?公式表示:
Y = 0.299R + 0.587G + 0.114B

I代表人眼敏感的色彩色差信号,用?公式表示:
I = 0.596R – 0.275G – 0.321B’

Q代表人眼不敏感的色差信号,用?公式表示:
Q = 0.212R – 0.523G + 0.311B
在这里插入图片描述

  • D、HSI颜色空间(HSI)
    色调H,饱和度为S,光强为V
    在这里插入图片描述
    上图为博客:https://www.cnblogs.com/faith0217/articles/4264652.html
    中的内容

二、编程实现提取图像中一点的RGB颜色值,并实现RGB转换为YUV,YIQ,HIS。

以下程序利用python实现

import math
import numpy as np
from PIL import Image

imgpath = 'C:/Users/11037/Desktop/7.jpg'  #图片路径

m_yuv = np.mat([[0.299,0.587,0.114],[-0.299,-0.587,0.886],[0.701,-0.587,-0.114]])
m_yiq = np.mat([[0.299,0.587,0.114],[0.596,-0.274,-0.322],[0.211,-0.524,0.312]])

def rgb2yuv(need_rgb):
	ans = list([int(i) for i in m_yuv*need_rgb])
	return ans

def yuv2rgb(need_yuv):
	m = m_yuv.I
	ans = list([int(i) for i in m*need_yuv])
	return ans

def rgb2yiq(need_rgb):
	ans = list([int(i) for i in m_yiq*need_rgb])
	return ans

def yiq2rgb(need_yiq):
	m = m_yiq.I
	ans = list([int(i) for i in m*need_yiq])
	return ans

'''
def rgb2hsi(need_rgb:np.mat): 
	rgb = list(need_rgb)
	r,g,b = int(rgb[0]),int(rgb[1]),int(rgb[2])
	theta = math.acos((((r-g)+(r-b))/2)/math.sqrt((r-g)**2+(r-b)*(g-b)))
	print('theta',theta)
	if b<=g:
		h = theta
	else:
		h = 360-theta
	s = 1-3*min(r,g,b)/(r+g+b)
	i = (r+g+b)/3
	return (h,s,i)
'''

img = Image.open(imgpath)
img = np.array(img)
print(img.shape)
x = int(input('请输入x:'))
y = int(input('请输入y:'))

testrgb = np.mat(img[x,y]).T
rgb2 = rgb2yuv(testrgb)
print('需要转换的rgb为:\n',testrgb)
print('rgb转yuv:',rgb2)
print('yuv转rgb:',yuv2rgb(np.mat(rgb2).T))




Jetbrains全家桶1年46,售后保障稳定

三、利用OpenCV转换RGB为HSV,YUV

1、代码

import math
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

imgpath = '' #图片路径

img = cv.imread(imgpath)

imggray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
imghsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
imgyuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)

plt.subplot(221),plt.imshow(img),plt.title('img')
plt.subplot(222),plt.imshow(imggray),plt.title('imggray')
plt.subplot(223),plt.imshow(imghsv),plt.title('imghsv')
plt.subplot(224),plt.imshow(imgyuv),plt.title('imgyuv')

plt.show()


效果:
在这里插入图片描述


若发现错误请给予指出,谢谢~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/219103.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python实现手写数字识别(小白入门)「建议收藏」

    python实现手写数字识别(小白入门)「建议收藏」手写数字识别(小白入门)今早刚刚上了节实验课,关于逻辑回归,所有手有点刺挠就想发个博客,作为刚刚入门的小白,看到代码运行成功就有点小激动,这个实验没啥含金量,所以路过的大牛不要停留,我怕你们吐槽。废话少说,直接看实验结果:这里写目录标题手写数字识别(小白入门)1.数据预处理2.训练模型3.测试模型,保存4.调用模型5.完整代码1.数据预处理其实呢,原理很简单,就是使用多变量逻辑回归,将训练28*28图片的灰度值转换成一维矩阵,这就变成了求784个特征向量1个标签的逻辑回归问题。代码如下:

  • javaweb分页显示_java分页查询原理思路

    javaweb分页显示_java分页查询原理思路效果图如下:实现步骤:1.创建实体User.class,参考代码如下:publicclassUser{ privateStringname; privateintage; privateStringgender; publicStringgetName(){ returnname; } publicvoidsetName(Stri…

  • Istio组件日志设置[通俗易懂]

    1.istio-pilot日志级别编辑istio-system.deployment.istio-pilot,修改args中–log_output_level=default:指定日志级别2.istio-policy日志级别设置同istio-pilot3.istio-proxy(envoy)日志级别设置进入istio-proxy容器中,通过如下命令进行设置:curl-…

  • 常用几种数据库对比

    常用几种数据库对比

  • 怎样将Sublime Text 设置成中文版(完整教程)「建议收藏」

    怎样将Sublime Text 设置成中文版(完整教程)「建议收藏」1.打开SublimeText,使用快捷键Shift+Ctrl+P,弹出查找栏,如图:2.在搜索框中输入关键字install,出现下拉选项,选择其中的:PackageControl:InstallPackage,如图:(PS:…

  • 程序员需要学数电吗(手机费电快有什么方法)

    目录????0.前言:????1.常见进制介绍:????(1)十进制:①示例:②可知一个任意多位的十进制数D均可展开为如下形式:③拓展——若以N取代式中的10,即可得到多位任意进制(N进制)数展开式的普遍形式:????(2)二进制:①根据N进制数展开的普遍形式可得任意一个二进制数均可展开为:![在这里插入图片描述](https://img-blog.csdnimg.cn/b7a289fac3d54c6f8ef071849945ca92.png)②并可利用上式计算出任一二进制数所表达的十进制数的大小:???

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号