实验2 色彩模式转换

news2024/7/3 5:10:48

1. 实验目的

①了解常用的色彩模式,理解色彩模式转换原理;
②掌握Photoshop中常用的颜色管理工具和色彩模式转换方法;
③掌握使用Matlab/Python+OpenCV编程实现色彩模式转换的方法。

2. 实验内容

①使用Photoshop中的颜色管理工具,转换色彩模式并查看各通道图像。
②调用Matlab/OpenCV中相关函数,实现RGB、YCbCr、HSV等色彩模式之间的转换;
③使用Matlab/Python,自行编写函数实现任意两个色彩模式之间的转换。

3. 实验过程

3.1 Photoshop颜色管理工具

打开Photoshop,新建空白文件,使用“拾色器”工具,改变前景色和后景色,观察各颜色通道变化规律和变化范围;确定颜色后,使用画笔工具和橡皮擦工具,观察图层变化情况;
① 实验步骤

在这里插入图片描述

②实验结果展示

在这里插入图片描述

3.2 Photoshop实现色彩模式转换

在Photoshop中实现RGB到CMYK,Lab色彩模式的转换,并查看各通道图像。
①实验步骤

在这里插入图片描述
② 实验结果展示
在这里插入图片描述

3.3 使用函数实现色彩模式转换

使用 Matlab/OpenCV中相关函数,实现RGB、YCbCr、HSV等色彩模式之间的转换。具体步骤如下:
⑴将RGB图像分离为R/G/B通道并显示;将R/G/B通道合并为RGB图像。
⑵将RGB图像转换为YCbCr/HSV图像,并分别显示各个通道图像;再将各个通道合并为YCbCr/HSV图像。
⑶将⑵中的YCbCr/HSV图像重新转换为RGB图像。

3.3.1 Matlab实现:

调用Matlab相关函数,实现各色彩模式之间的转换:
① 主要函数及其参数
请填写以下函数对应的参数说明:

rgb2YCbCr(image)rgb2YCbCr(image) 是一个函数,用于将RGB(红绿蓝)图像转换为YCbCr(亮度、蓝色差、红色差)颜色空间
rgb2hsv rgb2hsv 是一个函数,用于将RGB(红绿蓝)图像转换为HSV(色相、饱和度、明度)颜色空间
ycbcr2rgbycbcr2rgb 是一个函数,用于将YCbCr(亮度、蓝色差、红色差)图像转换回RGB(红绿蓝)颜色空间
hsv2rgbhsv2rgb 是一个函数,用于将HSV(色相、饱和度、明度)图像转换为RGB(红绿蓝)颜色空间

② 实验代码展示

%将 RGB 图像分离为 R/G/B 通道并显示,然后将 R/G/B 通道合并为 RGB 图像,可以使用以下函数:

% 读取 RGB 图像
rgbImage = imread('lena.png');

% 分离 R/G/B 通道
redChannel = rgbImage(:,:,1);
greenChannel = rgbImage(:,:,2);
blueChannel = rgbImage(:,:,3);

% 显示 R/G/B 通道图像
figure;
subplot(2,2,1);
imshow(rgbImage);
title('Original RGB Image');
subplot(2,2,2);
imshow(redChannel);
title('Red Channel');
subplot(2,2,3);
imshow(greenChannel);
title('Green Channel');
subplot(2,2,4);
imshow(blueChannel);
title('Blue Channel');

% 合并 R/G/B 通道为 RGB 图像
mergedImage = cat(3, redChannel, greenChannel, blueChannel);
figure;
imshow(mergedImage);
title('Merged RGB Image');

%将 RGB 图像转换为 YCbCr/HSV 图像,并分别显示各个通道图像,然后将各个通道合并为 YCbCr/HSV 图像,可以使用以下函数:

% RGB 转 YCbCr 图像
ycbcrImage = rgb2ycbcr(rgbImage);

% 分离 Y/Cb/Cr 通道
yChannel = ycbcrImage(:,:,1);
cbChannel = ycbcrImage(:,:,2);
crChannel = ycbcrImage(:,:,3);

% 显示 Y/Cb/Cr 通道图像
figure;
subplot(2,2,1);
imshow(rgbImage);
title('Original RGB Image');
subplot(2,2,2);
imshow(yChannel);
title('Y Channel');
subplot(2,2,3);
imshow(cbChannel);
title('Cb Channel');
subplot(2,2,4);
imshow(crChannel);
title('Cr Channel');

% 合并 Y/Cb/Cr 通道为 YCbCr 图像
mergedYCbCrImage = cat(3, yChannel, cbChannel, crChannel);
figure;
imshow(mergedYCbCrImage);
title('Merged YCbCr Image');

% RGB 转 HSV 图像
hsvImage = rgb2hsv(rgbImage);

% 分离 H/S/V 通道
hChannel = hsvImage(:,:,1);
sChannel = hsvImage(:,:,2);
vChannel = hsvImage(:,:,3);

% 显示 H/S/V 通道图像
figure;
subplot(2,2,1);
imshow(rgbImage);
title('Original RGB Image');
subplot(2,2,2);
imshow(hChannel);
title('H Channel');
subplot(2,2,3);
imshow(sChannel);
title('S Channel');
subplot(2,2,4);
imshow(vChannel);
title('V Channel');

% 合并 H/S/V 通道为 HSV 图像
mergedHSVImage = cat(3, hChannel, sChannel, vChannel);
figure;
imshow(mergedHSVImage);
title('Merged HSV Image');

%将上述步骤中得到的 YCbCr/HSV 图像重新转换为 RGB 图像,可以使用以下函数:

% YCbCr 转 RGB 图像
reconstructedRGBImage = ycbcr2rgb(ycbcrImage);
figure;
imshow(reconstructedRGBImage);
title('Reconstructed RGB Image from YCbCr');

% HSV 转 RGB 图像
reconstructedRGBImage = hsv2rgb(hsvImage);
figure;
imshow(reconstructedRGBImage);
title('Reconstructed RGB Image from HSV');

②实验结果展示

在这里插入图片描述

3.3.2 Python+OpenCV实现

调用OpenCV中相关函数,实现各色彩模式之间的转换:
① 主要函数及其参数
请填写以下函数对应的参数说明:

cv2.COLOR_BGR2RGBcv2.COLOR_BGR2RGB 是OpenCV库中的一个颜色转换标志,用于将BGR(蓝绿红)颜色空间转换为RGB(红绿蓝)颜色空间
cv2.COLOR_BGR2GRAY cv2.COLOR_BGR2GRAY 是OpenCV库中的一个颜色转换标志,用于将BGR(蓝绿红)图像转换为灰度图像
cv2.COLOR_BGR2HSVcv2.COLOR_BGR2HSV 是OpenCV库中的一个颜色转换标志,用于将BGR(蓝绿红)图像转换为HSV(色相、饱和度、明度)颜色空间

② 实验代码展示

import cv2 as cv
import numpy as np

# 读取图像
image = cv.imread('lena.png')

# (1) RGB图像通道分离和合并
b, g, r = cv.split(image)  # 分离通道
cv.imshow('Blue Channel', b)
cv.imshow('Green Channel', g)
cv.imshow('Red Channel', r)

merged_image = cv.merge([b, g, r])  # 合并通道
cv.imshow('Merged RGB Image', merged_image)
cv.waitKey(0)
cv.destroyAllWindows()

# (2) RGB到YCbCr和HSV的转换
ycbcr_image = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)
y, cb, cr = cv.split(ycbcr_image)  # 分离通道
cv.imshow('Y Channel', y)
cv.imshow('Cb Channel', cb)
cv.imshow('Cr Channel', cr)

hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)
h, s, v = cv.split(hsv_image)  # 分离通道
cv.imshow('Hue Channel', h)
cv.imshow('Saturation Channel', s)
cv.imshow('Value Channel', v)

cv.waitKey(0)
cv.destroyAllWindows()

# (3) YCbCr和HSV到RGB的转换
rgb_from_ycbcr = cv.cvtColor(ycbcr_image, cv.COLOR_YCrCb2BGR)
cv.imshow('RGB Image from YCbCr', rgb_from_ycbcr)

rgb_from_hsv = cv.cvtColor(hsv_image, cv.COLOR_HSV2BGR)
cv.imshow('RGB Image from HSV', rgb_from_hsv)

cv.waitKey(0)
cv.destroyAllWindows()

③实验结果展示
在此仅为部分实验结果

在这里插入图片描述

3.3.3 自行编写代码实现

不调用相关库中的函数,根据色彩模式转换原理,找到各色彩模式对应的转换关系,并自行编写代码实现·RGB、YCbCr、HSV等色彩模式的转换。
①实验代码展示

在这里插入图片描述
② 实验结果展示
效果与上图类似,只需在脚本中调用即可。

4. 实验小结

① 使用调用的Matlab函数,OpenCV函数以及自己编写的函数,进行相同的色彩模式转换。得到的转换结果以及各通道图像是一样的吗?查阅相关资料并分析产生这种结果的原因。
答:算法实现的差异:不同的库或代码实现可能会在算法的具体实现上存在微小的差异。这可能涉及数值计算的舍入误差、通道值的截断或舍入方式等。这些差异可能会导致微小的像素级差异,尤其是在通道值较小的情况下。
数据类型的差异:不同的库或代码实现可能使用不同的数据类型来表示图像和通道值。例如,某些库可能使用整数类型(如uint8)表示通道值,而其他库可能使用浮点类型(如float或double)。这可能会导致数值范围和精度方面的差异。
图像加载和保存的差异:图像加载和保存的过程中可能存在不同的编解码算法或参数设置。这可能导致在图像加载和保存过程中引入一些额外的差异。
② 将10张尺寸为160×60的RGB图像存储在多维数组pic中,多维数组的各个维度分别代表了图像中的哪些信息?在不同的图像处理库中,各个维度所代表的含义一样吗?
答:第一个维度(维度0):表示图像的索引或编号。在这种情况下,它表示第几张图像,范围通常是从0到9。
第二个维度(维度1):表示图像的行索引,即图像的垂直方向。
第三个维度(维度2):表示图像的列索引,即图像的水平方向。
第四个维度(维度3):表示图像的通道索引,通常用于表示图像的不同颜色通道。在RGB图像中,常见的通道顺序是红色(R)、绿色(G)和蓝色(B)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js个人博客

1. 项目介绍 项目演示地址:https://ximingx.org.cn/ 项目github:https://github.com/ximingx/blog 想象一下,你是一位热爱写作的程序员小王。每天,你都有很多新的想法和技术心得想要分享。但是,管理你的博客网站却成了一个让你头疼的问题。 周一早晨…

统计分析利器:深入解读卡方检验与单因素方差分析的应用案例【练习题】

一、卡方检验 1.对400人进行问卷调查,询问对于教学改革的看法,调查结果如下表所示,请问不同学科不同性别的人意见是否相同。 学科 男生 女生 工科 80 40 理科 120 160 (性别,学科均无序分类>卡方检验&am…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目录 一.RemoteAttestation原理介绍1.1 远程认证原理1.2 远程认证步骤1.3 远程认证基本流程1.4 IAS通过以下步骤验证报告的签名1.5 关键术语1.6 总结二.源码分析2.1 README2.1.1 README给出的编译流程2.2 重点代码分析2.2.0 主要代码模块交互流程分析2.2.1 isv_app文件夹2.…

Leetcode刷题笔记 | 二叉树基本性质 | 一天的题量 | 5道题目 | 深度优先搜索 | 广度优先搜索 | 递归 | 遍历

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌本期毛毛张分享的是LeetCode关于二叉树🌲的性质的一些基础题,做这些题目的本质还是遍历二叉树🏃‍➡️的过程&#…

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app,一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目,可以节省大量的开发时间。 这…

Docker部署Dillinger个人文本编辑器

Docker部署Dillinger个人文本编辑器 一、Dillinger介绍1.1 Dillinger简介1.2 Dillinger使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、拉取Dillinger镜像五、部署Dill…

前后端分离的后台管理系统开发模板(带你从零开发一套自己的若依框架)上

前言: 目前,前后端分离开发已经成为当前web开发的主流。目前最流行的技术选型是前端vue3后端的spring boot3,本次。就基于这两个市面上主流的框架来开发出一套基本的后台管理系统的模板,以便于我们今后的开发。 前端使用vue3ele…

YOLO网络结构特点收录

YOLO网络结构特点收录 YOLO(You Only Look Once)网络结构随着版本迭代不断进化,以下是一些关键版本的网络结构特点概述: YOLOv1 输入:将图像调整至固定尺寸,如448x448像素。骨干网络:初期版本…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作数

Every day a Leetcode 题目来源:3190. 使所有元素都可以被 3 整除的最少操作数 解法1:遍历 遍历数组,累加最少操作数,即 min(num % 3, 3 - num % 3)。 代码: /** lc appleetcode.cn id3190 langcpp** [3190] 使所…

ElementUI框架搭建及组件使用

前言: 当开始使用ElementUI框架来搭建网站或Web应用程序时,了解框架的基本结构和组件的使用是至关重要的。ElementUI是一个基于Vue.js的框架,提供了丰富的UI组件和工具,可以帮助开发人员快速构建现代化的用户界面。 在本文中,我…

电脑提示vcomp140.dll丢失的几种有效的解决方法,轻松搞定dll问题

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是找不到vcomp140.dll。那么,究竟什么是vcomp140.dll呢?为什么会出现找不到vcomp140.dll的情况呢?本文将从vcomp140.dll的定义、常见原因、对电脑的影响以及解…

[鹏城杯 2022]babybit

发现一个压缩包提取出来提取出来两个压缩包里面是注册表使用MiTeC Windows Registry Recovery 恢复注册表 flag在ROOT\ControlSet001\Control\FVEStats里的OsvEncryptInit和OsvEncryptComplete中 NSSCTF{2022/6/13_15:17:39_2022/6/13_15:23:46}

Nuxtjs3教程

起步 官方文档 官方目录结构 安装 npx nuxi@latest init <project-name>后面跟着提示走就行 最后yarn run dev 启动项目访问localhost:3000即可 路由组件 app.vue为项目根组件 <nuxt-page />为路由显示入口 将app.vue更改内容如下 <template><d…

PostgreSQL 17 Beta 1 发布!

PostgreSQL 全球开发小组宣布&#xff0c;PostgreSQL 17 的第一个测试版本现已可供下载。此版本包含 PostgreSQL 17 正式发布时将提供的所有功能的预览&#xff0c;但测试期间版本的某些细节可能会发生变化。 #PG培训#PG考试#postgresql培训#postgresql考试#postgresql认证 您…

【Qt+opencv】编译、配置opencv

文章目录 前言下载opencv编译opencvmingw版本 总结 前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它包含了超过2500个优化的算法。这些算法可以用来检测和识别面部&#xff0c;识别对象&#x…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

Python_Socket

Python Socket socket 是通讯中的一种方式&#xff0c;主要用来处理客户端与伺服器端之串连&#xff0c;只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…

pdf怎么转换成jpg,本地转换还是在线转换?

PDF&#xff08;Portable Document Format&#xff09;和JPG&#xff08;Joint Photographic Experts Group&#xff09;这两种文件格式在我们的日常生活和工作中扮演着举足轻重的角色。PDF因其跨平台、保持原样性强的特点&#xff0c;被广泛应用于文件传输和存储&#xff1b;而…

快速修复mfc100u.dll丢失解决方案

相连文章&#xff1a;SecureCRT的安装破解 [详细过程2024] 有小伙伴向我反馈在打开SecureFX注册机之后显示【mfc100u.dll找不到】重装之后也没有用&#xff0c;这个是因为Microsoft Visual C的运行时组件和库出现了错误&#xff0c;直接选择重新安装就可以 出现这种情况的原因…

识图生成代码:通义千问vsGPt4o,有点小崩

今日对比一下通义千问和GPt4o&#xff0c;在通过识别图片然后去生成前端代码 在当今ai的时代&#xff0c;通过ai去生成页面的代码可以很大的提高我们的开发效率下面是我们要求的生成的图片截图&#xff0c;这是掘金的榜单 效果对比 首先我们使用通义千问&#xff0c;让他去帮我…