当前位置: 首页 > 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…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...