图像处理技术与应用(四)

news2025/1/9 19:15:31

图像处理技术与应用入门

颜色空间及其转换

颜色空间是一种用于在数字图像中表达和指定颜色的方法。不同的颜色空间使用不同的方式来定义颜色,每种方式都有其特定的用途和优势。以下是一些常见的颜色空间及其特点:

RGB(红绿蓝):这是最常见的颜色空间,用于计算机显示器和数字设备。在RGB颜色空间中,每种颜色都是由红色、绿色和蓝色三个基色的不同组合来定义的。每个基色可以有不同的强度,通常用0到255的整数表示,其中0表示该颜色的完全缺失,255表示该颜色的最大强度。

CMYK(青色、品红色、黄色、黑色):这种颜色空间主要用于印刷行业。与RGB不同,CMYK是一种减色模型,其中青色(Cyan)、品红色(Magenta)、黄色(Yellow)和黑色(Key)的混合用来吸收光,而不是发射光。在印刷过程中,这些颜色的不同组合可以产生几乎所有其他颜色。

HSV(色相、饱和度、亮度):HSV颜色空间是根据人眼对颜色的感知来定义的。色相(Hue)是颜色在色轮上的位置,饱和度(Saturation)是颜色的纯度,亮度(Value)是颜色的明亮程度。HSV颜色空间在图像处理中很有用,因为它可以独立地改变颜色的各个方面。

HSL(色相、饱和度、亮度):HSL与HSV类似,但亮度的概念略有不同。在HSL中,亮度(Lightness)是指颜色的明亮或暗淡程度,而HSV中的亮度(Value)是指颜色的明暗程度加上白色。HSL在网页设计和图形设计中很受欢迎。

YUV(亮度、色度):YUV颜色空间主要用于视频系统中,它将亮度信息(Y)与颜色信息(U和V)分开。这种方法可以减少颜色信息的带宽,因为人眼对亮度变化比对颜色变化更敏感。

颜色转换是指在不同的颜色空间之间转换图像颜色的过程。例如,将RGB图像转换为灰度图像就是将彩色信息转换为只有亮度信息的过程。转换通常需要数学公式和算法来确保颜色在新的颜色空间中正确地表示。

在Python的skimage库中,color.rgb2gray函数用于将RGB图像转换为灰度图像。这个函数使用前面提到的权重来计算每个像素的灰度值,从而得到一个只有亮度信息的单通道图像。这种转换在图像分析和机器视觉中很常见,因为它简化了图像处理任务,并减少了计算量。

rgb转灰度图

在图像处理中,将彩色图像转换为灰度图像是一个常见的操作。color.rgb2gray 函数是 skimage.color 模块中的一个函数,用于执行这种转换。

彩色图像通常由三个颜色通道组成:红色、绿色和蓝色(RGB)。每个像素在这三个通道上都有一个值,这些值共同决定了像素的颜色。例如,一个像素可能具有 (R, G, B) 值为 (255, 0, 0),这意味着它是纯红色的。

灰度图像只有一个通道,每个像素只有一个值,这个值代表了像素的亮度。在灰度图像中,较亮的区域有较高的值,较暗的区域有较低的值。灰度图像的像素值通常在 0 到 255 之间,其中 0 表示黑色,255 表示白色。

color.rgb2gray 函数通过一定的权重将彩色图像的三个通道合并成一个通道。这种转换通常使用以下公式:

gray=0.299×R+0.587×G+0.114×B

这里的权重是基于人眼对不同颜色的敏感度。绿色通道的权重最高,因为人眼对绿色的敏感度最高,对蓝色的敏感度最低,因此蓝色通道的权重最低。

例如,如果有一个像素的 RGB 值为 (100, 150, 200),那么它的灰度值将是:

gray=0.299×100+0.587×150+0.114×200≈148.5g

因此,这个像素在灰度图像中的值将是 148 或 149(取决于具体的实现是否四舍五入)。

转换后的灰度图像可以用于简化图像分析,减少计算量,并且有时可以突出某些特征,使其更容易检测或识别。

from skimage import io, data, color
img = data.hubble_deep_field()
gray = color.rgb2gray(img)
io.imshow(gray)

                                        原图                                              灰度转换

rgb转hsv

RGB到HSV的转换是一个数学过程,它将红色、绿色、蓝色的颜色值转换为色相(Hue)、饱和度(Saturation)和亮度(Value)的值。在Python中,您可以使用skimage.color模块中的rgb2hsv函数来实现这一转换。

以下是RGB到HSV转换的基本步骤:

1.归一化RGB值:首先,将RGB值从0-255的范围转换为0-1的范围。

2.找出最大和最小值:对于每个像素,找出三个颜色通道中的最大值(Max)和最小值(Min)。

3.计算色相(H):

  1. 如果Max等于Min,那么H = 0(无色相)。
  2. 如果Max是R,那么H = (G - B) / (Max - Min)。
  3. 如果Max是G,那么H = 2 + (B - R) / (Max - Min)。
  4. 如果Max是B,那么H = 4 + (R - G) / (Max - Min)。
  5. 将H乘以60,得到色相的角度(在0到360之间)。

4.计算饱和度(S):

  1. 如果Max为0,则S = 0(无饱和度)。
  2. 否则,S = (Max - Min) / Max。
  3. 将S乘以255,得到饱和度的值(在0到255之间)。

5.计算亮度(V):

  1. V = Max。
  2. 将V乘以255,得到亮度的值(在0到255之间)。

RGB转化到HSV的算法

max=max(R,G,B):

min=min(R,G,B)

V=max(R,G,B)

S=(max-min)/max:

if R = max,H =(G-B)/(max-min)* 60

if G = max,H = 120+(B-R)/(max-min)* 60

if B = max,H = 240 +(R-G)/(max-min)* 60

if H < 0,H = H+ 360

代码:

from skimage import io, data, color

img = data.hubble_deep_field()

gray = color.rgb2hsv(img)    # 色调(H),饱和度(S),亮度(V)

io.imshow(gray)

                                      原图                                              hsv转换

rgb转lab

RGB到Lab颜色空间的转换是一种将红色、绿色、蓝色颜色值转换为CIE Lab颜色空间的过程。Lab颜色空间是一种设备无关的颜色空间,它旨在与人类的视觉感知更为一致。在Lab颜色空间中,L代表亮度,a和b代表颜色对立维度,其中a表示从绿到红的颜色范围,b表示从蓝到黄的颜色范围。

from skimage import io, data, color
img = data.hubble_deep_field()
gray = color.rgb2lab(img)    # Lab颜色模型由三个要素组成,一个要素是亮度(L),a 和b是两个颜色通道。
# a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);
# b是从亮蓝色(低亮度值)到灰色(中亮度值)再到黄色(高亮度值)。
io.imshow(gray)

                                       原图                                                              hsv转换

Hvs转rgb

HSV转化到RGB的算法

if s = 0R=G=B=VelseH /= 60;i = INTEGER(H)f = H - ia = V * ( 1 - s )b = V * ( 1 - s * f )c = V * ( 1 - s * (1 - f ) )switch(i)case 0: R = V; G = c; B = a;case 1: R = b; G = v; B = a;case 2: R = a; G = v; B = c;case 3: R = a; G = b; B = v;case 4: R = c; G = a; B = v;case 5: R = v; G = a; B = b;

from skimage import io, data, color

img = data.hubble_deep_field()

gray = color.hsv2rgb(img)

io.imshow(gray)

                                        原图                                              hsv转换

Lab转rgb

from skimage import io, data, color

img = data.hubble_deep_field()

gray = color.lab2rgb(img)

io.imshow(gray)

                                       原图                                                      hsv转换

 根据标签值对图片进行着色

from skimage import io, color
import numpy as np

img = io.imread("dd.jpg")
gray = color.rgb2gray(img)
rows, cols = gray.shape
labels = np.zeros([rows,cols])

for i in range(rows):
    for j in range(cols):
        if (gray[i,j]<0.4):
            labels[i,j]=0
        elif(gray[i,j]<0.75):
            labels[i,j]=1
        else:
            labels[i,j]=2
            
dstt = color.label2rgb(labels)
io.imshow(dstt)

读取一个彩色图像,将其转换为灰度图像,然后根据灰度值将图像分割为三个区域(暗、中、亮),并使用不同的颜色对每个区域进行标记,最后显示了着色后的图像。这种方法可以用于图像分析、分割或可视化,以突出不同的图像区域。

                                        原图                         ​​​​​​​        ​​​​​​​        ​​​​​​​标签着色图像

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

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

相关文章

【七十九】【算法分析与设计】并查集模板!!!并查集的实现_牛客题霸_牛客网,【模板】并查集 - 洛谷,并查集代码!!!

并查集的实现_牛客题霸_牛客网 描述 给定一个没有重复值的整形数组arr&#xff0c;初始时认为arr中每一个数各自都是一个单独的集合。请设计一种叫UnionFind的结构&#xff0c;并提供以下两个操作。 boolean isSameSet(int a, int b): 查询a和b这两个数是否属于一个集合 void u…

SparkSQL编程入口和模型与SparkSQL基本编程

SparkSQL编程入口和模型 SparkSQL编程模型 主要通过两种方式操作SparkSQL&#xff0c;一种就是SQL&#xff0c;另一种为DataFrame和Dataset。 1)SQL&#xff1a;SQL不用多说&#xff0c;就和Hive操作一样&#xff0c;但是需要清楚一点的是&#xff0c;SQL操作的是表&#xf…

90、动态规划-最长的有效括号

思路&#xff1a; 找出有效括号并且是最长的有效括号 dp[i]表示以i结尾的括号最长是多少 然后从1开始 因为从0位置不管是左括号还是右括号都是无法形成一个完成的括号。所以dp[0]0&#xff1b; 当i1时候&#xff0c;判断括号是否是&#xff09;如果不是那么无法结尾&#x…

3. FactoryTalk View SE按钮工具库

系统自带的按钮比较丑陋&#xff0c;为了迎合客户需求可以从工具库中选择漂亮的按钮图形。 单击按钮选择释放外观–使用图像引用–启动库–选择按钮库&#xff0c;找到一款合适的图形–右键copy copy之后点击从库中粘贴–确定 这样就实现按下按钮的颜色是红色&#xff0c;在…

记录一次给PCAN升级固件pcan_canable_hw-449dc73.bin

方法一:网页升级 首先将3.3V与BOOT短接,插入电脑USB接口,识别为STM32 BOOTLOADER,芯片进入DFU模式。 如果电脑没有识别到STM32 BOOTLOADER,或无法驱动,则需要安装ImpulseRC_Driver_Fixer修复工具。 推荐使用Google浏览器打开网页升级选择PCAN固件,点Connect and Update,…

【Stream 流】通过一个例子看遍所有Stream API使用场景

前言 上篇文章记录了方法引用&#xff0c;Lambda表达式等基础的知识点&#xff0c;这篇文章主要结合课设项目详细介绍Stream 流的API以及它的主要场景。 Stream API作用 在Java 8及其以后的版本中&#xff0c;Stream API为处理集合数据提供了强大而灵活的功能。有了Stream AP…

Java双亲委派机制

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 概述 Java程序在运…

JAVA聊天室-网络编程socket+javafx+maven【附带exe+源代码,小白可运行,简单容易上手,代码附带注释】

前言 可以学习到java网络编程的知识&#xff0c;也可以拿去当个模板去添加功能 项目展示&#xff1a; chatv1.0 服务器打包视频&#xff1a; 服务器打包exe 1. 项目概述 本项目旨在开发一个简单的群聊室应用程序&#xff0c;使用JavaFX作为用户界面框架&#xff0c;以及Java…

管道通信与Linux命令的执行-(读书笔记-十三)

|前一个命令的输出作为后一个命令的输入。 在Linux中&#xff0c;|符号是一个管道符号&#xff0c;用于将前一个命令的输出作为后一个命令的输入。这种机制允许你将多个命令组合在一起&#xff0c;以执行复杂的操作。下面是一些基本的例子&#xff1a; 查看当前目录下的文件列…

Axure实现菜单抽屉效果

Axure是怎么实现如下效果的&#xff1f; 菜单打开和收起侧边栏菜单抽屉效果 实现效果 两级菜单&#xff0c;点击菜单收起其他菜单&#xff0c;打开当前菜单。 实现原理 单击一级菜单时&#xff0c;1&#xff09;切换当下二季菜单的显示/隐藏状态 2&#xff09;隐藏其他菜单…

[Android]四大组件简介

在 Android 开发中&#xff0c;“四大组件”&#xff08;Four Major Components&#xff09;是指构成 Android 应用程序的四种核心组件&#xff0c;它们通过各自的方式与系统交互&#xff0c;实现应用的多样功能。这些组件是&#xff1a;Activity、Service、Broadcast Receiver…

青春送温暖 立夏寄真情

&#xff08;通讯员&#xff1a;赵灿飞 图&#xff1a;杨美、孙红浪&#xff09; 在青春洋溢的五月&#xff0c;为传承中华民族尊老敬老的传统美德&#xff0c;促进当代青年与老人的跨代交流&#xff0c;增强青年的社会责任感和使命感&#xff0c;传递正能量和关爱困难群体…

组播应用:SW1、SW2、RT1、RT2、AC1运行PIM-SM

SW1、SW2、RT1、RT2、AC1运行PIM-SM,SW1 Vlan10为C-BSR和C-RP;SW1产品网络(PC1)启用组播,用VLC工具串流播放视频文件“1.mp4”,模拟组播源,设置此视频循环播放,组地址232.1.1.1,端口1234,实现总公司和分公司收看视频,用PC2测试。 一、SW1、SW2、RT1、RT2、AC1配置如…

功能全面的外发文件控制方案,拿走不谢

在日常办公中&#xff0c;很多企业往往只采取各种措施来确保存储数据的安全&#xff0c;却忽略了文件外发的安全。因此企业由于自身的安全防护机制不严谨&#xff0c;引发的数据安全事件频发&#xff0c;经常导致严重的经济损失。使用较多的外发方式有邮件、IM通讯工具、网盘、…

docker的commit命令使用制作镜像

docker run -it ubuntu 最基础的ubuntu启动后安装vim 的命令 apt-get update apt-get -y install vim docker commit -m"my_test_ubuntu" -a"za" 80977284a998 atljw/myubuntu:1.0 将本地镜像推送到阿里云 首先登录阿里云服务-控制台 记得一定要设定设…

鸢尾花分类-pytorch实现

前言 本文用pytorch实现了鸢尾花分类&#xff0c;数据不多&#xff0c;只做代码展示用&#xff0c;后续有升级版本。 代码 -*- coding: utf-8 -*- File : main.py Author: Shanmh Time : 2024/05/06 上午9:37 Function&#xff1a;import torch from sklearn import datase…

uniapp生成二维码(uQRCode)与自定义绘制样式与内容

二维码生成使用了一款基于Javascript环境开发的插件 uQRCode &#xff0c;它不仅适用于uniapp&#xff0c;也适用于所有Javascript运行环境的前端应用和Node.js。 uQRCode 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id1287 目录 1、npm安装 2、通过import引…

fabric搭建生产网络

fabric搭建生产网络 一、生成组织结构与身份证书 解包 hyperledger-fabric-linux-amd64-2.5.0.tar.gz 1.1、crypto-config.yaml配置文件 ./bin/cryptogen showtemplate > crypto-config.yaml 将crypto-config.yaml内容修改为&#xff1a; # -------------------------…

pygame实现鼠标绘制并调节画笔大小

pygame实现鼠标绘制并调节画笔大小 pygame介绍调节画笔大小鼠标绘制效果 pygame介绍 Pygame是一个开源的Python库&#xff0c;专为电子游戏开发而设计。它建立在SDL&#xff08;Simple DirectMedia Layer&#xff09;的基础上&#xff0c;允许开发者使用Python这种高级语言来实…

微信个人号开发api接口-视频号矩阵接口-VIdeosApi

友情链接&#xff1a;VIdeosApi 获取用户主页 接口地址&#xff1a; http://api.videosapi.com/finder/v2/api/finder/userPage 入参 { "appId": "{{appid}}", "lastBuffer": "", "toUserName": "v2_060000231003b2…