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

实验2 色彩模式转换

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)

相关文章:

实验2 色彩模式转换

1. 实验目的 ①了解常用的色彩模式,理解色彩模式转换原理; ②掌握Photoshop中常用的颜色管理工具和色彩模式转换方法; ③掌握使用Matlab/PythonOpenCV编程实现色彩模式转换的方法。 2. 实验内容 ①使用Photoshop中的颜色管理工具&#xff…...

AES加密算法及AES-CMAC原理白话版系统解析

本文框架 前言1. AES加密理论1.1 不同AES算法区别1.2 加密过程介绍1.2.1 加密模式和填充方案选择1.2.2 密钥扩展1.2.3分组处理1.2.4多轮加密1.2.4.1字节替换1.2.4.2行移位1.2.4.3列混淆1.2.4.4轮密钥加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…...

24年hvv前夕,微步也要收费了,情报共享会在今年结束么?

一个人走的很快,但一群人才能走的更远。吉祥同学学安全https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&scene21#wechat_redirect这个星球🔗里面已经沉淀了: 《Ja…...

【地理库 Turf.js】

非常全面的地理库 , 这里枚举一些比较常用,重点的功能, 重点功能 提供地理相关的类:包括点,线,面等类。 测量功能:点到线段的距离,点和线的关系等。 判断功能: 点是否在…...

springboot在线考试 LW +PPT+源码+讲解

第三章 系统分析 3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本系统来补充线下在线考试管理模式中的缺限,去解决其中的不足等,通过对…...

JDBC中的事务及其ACID特性

在JDBC(Java Database Connectivity)中,事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作。这些操作要么全部执行,要么全部不执行,从而确保数据库的完整性和一致性。事务是现代数据库…...

Python | Leetcode Python题解之第204题计数质数

题目: 题解: MX5000000 is_prime [1] * MX is_prime[0]is_prime[1]0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):#循环每次增加iis_prime[j] 0 class Solution:def countPrimes(self, n: int) -> int:return sum(is_prim…...

【课程总结】Day10:卷积网络的基本组件

前言 由于接下来的课程内容将围绕计算机视觉展开,其中接触最多的内容是卷积、卷积神经网络等…因此,本篇内容将从卷积入手,梳理理解:卷积的意义、卷积在图像处理中的作用以及卷积神经网络的概念,最后利用pytorch搭建一…...

ModuleNotFoundError: No module named ‘_sysconfigdata_x86_64_conda_linux_gnu‘

ModuleNotFoundError: No module named _sysconfigdata_x86_64_conda_linux_gnu 1.软件环境⚙️2.问题描述🔍3.解决方法🐡4.结果预览🤔 1.软件环境⚙️ Ubuntu 20.04 Python 3.7.0 2.问题描述🔍 今天发现更新conda之后&#xff0…...

【物联网】室内定位技术及定位方式简介

目录 一、概述 二、常用的室内定位技术 2.1 WIFI技术 2.2 UWB超宽带 2.3 蓝牙BLE 2.4 ZigBee技术 2.5 RFID技术 三、常用的室内定位方式 3.1 信号到达时间 3.2 信号到达时间差 3.3 信号到达角 3.4 接收信号强度 一、概述 GPS是目前应用最广泛的定位技术&#xff0…...

Leetcode[反转链表]

LCR 024. 反转链表 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示…...

【差分数组】个人练习-Leetcode-2249. Count Lattice Points Inside a Circle

题目链接:https://leetcode.cn/problems/count-lattice-points-inside-a-circle/description/ 题目大意:给出一系列圆的圆心坐标和半径,求在这些圆内部(边缘也算)的格点的数量。 思路:简单的思路就是暴力…...

【JavaEE】Cookie和Session详解

一.Cookie 首先我们知道HTTP协议本身是’‘无状态’‘的, 这里的’‘无状态’指的是:默认情况下HTTP协议的客户端和服务器之间的这次通信,和下次通信之间没有直接的联系. 但是在实际的开发过程之中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后,第二次访…...

uniapp canvas vue3 ts实例

<template><view><canvas canvas-idcanvas-test class"canvas-test"></canvas></view> </template><script setup lang"ts">//封装的jsimport libs from /libs;//重点引入的import type { ComponentInternalIns…...

网络构建关键技术_3.SDN技术

SDN网络在控制平面和转发平面分别采用了不同技术&#xff0c;以满足SDN网络控件的全局性和灵活性&#xff0c;业务转发的高效性及高性价比要求。主要关键技术包括&#xff1a;控制平面技术、数据平面技术和转发规则一致性更新技术等。 1.控制平面技术 控制器是控制平面核心部件…...

【高性能服务器】单进程服务器

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 单进程服务器 …...

任意密码重置漏洞

文章目录 1. 任意密码重置漏洞原理2. 任意密码重置漏洞产生原因3. 任意密码重置漏洞场景3.1 验证码爆破3.2 验证凭证回传3.3 验证凭证未绑是用户3.4 跳过验证步骤3.5 凭证可预测3.6 同时向多个账户发送凭证 4. 任意密码重置经典案例4.1 中国人寿某重要系统任意账户密码重置4.2 …...

synchronized关键字和ReentrantLock在不同jdk版本中性能哪个高?该怎么选择呢?

synchronized关键字和ReentrantLock在不同JDK版本中的性能差异经历了显著的变化。早期&#xff0c;在JDK 1.5及以前的版本中&#xff0c;ReentrantLock通常提供了更好的性能&#xff0c;主要是因为synchronized关键字的实现较为简单&#xff0c;没有太多的优化&#xff0c;导致…...

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…...

java LinkedList 怎么保证线程安全

在 Java 中&#xff0c;LinkedList 本身并不是线程安全的。如果需要在多线程环境中使用 LinkedList&#xff0c;可以采取以下几种方法来保证线程安全性&#xff1a; 1. 使用 Collections.synchronizedList Java 提供了一个实用的方法 Collections.synchronizedList 来包装 Li…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...