实验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(色相、饱和度、明度)颜色空间 |
ycbcr2rgb | ycbcr2rgb 是一个函数,用于将YCbCr(亮度、蓝色差、红色差)图像转换回RGB(红绿蓝)颜色空间 |
hsv2rgb | hsv2rgb 是一个函数,用于将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_BGR2RGB | cv2.COLOR_BGR2RGB 是OpenCV库中的一个颜色转换标志,用于将BGR(蓝绿红)颜色空间转换为RGB(红绿蓝)颜色空间 |
cv2.COLOR_BGR2GRAY | cv2.COLOR_BGR2GRAY 是OpenCV库中的一个颜色转换标志,用于将BGR(蓝绿红)图像转换为灰度图像 |
cv2.COLOR_BGR2HSV | cv2.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中的颜色管理工具ÿ…...

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之后࿰…...

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

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

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

任意密码重置漏洞
文章目录 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版本中的性能差异经历了显著的变化。早期,在JDK 1.5及以前的版本中,ReentrantLock通常提供了更好的性能,主要是因为synchronized关键字的实现较为简单,没有太多的优化,导致…...

【旭日x3派】部署官方yolov5全流程
地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间,安装依赖:3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…...
java LinkedList 怎么保证线程安全
在 Java 中,LinkedList 本身并不是线程安全的。如果需要在多线程环境中使用 LinkedList,可以采取以下几种方法来保证线程安全性: 1. 使用 Collections.synchronizedList Java 提供了一个实用的方法 Collections.synchronizedList 来包装 Li…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...