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

传统图像处理之颜色特征

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。

专栏简介:   本专栏主要研究计算机视觉,涉及算法,案例实践,网络模型等知识。包括一些常用的数据处理算法,也会介绍很多的Python第三方库。如果需要,点击这里  订阅专栏 。

给大家分享一个我很喜欢的一句话:“每天多努力一点,不为别的,只为日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!”


目录

颜色特征

RGB颜色特征

HIS颜色空间

HSV颜色空间

 颜色直方图

OpenCV图像色调、对比度变化


在深度学习广泛应用之前,也就是我们所说的传统图像处理,人们是如何处理图像的呢?首先找出图片中的关键特征,然后对这些特征进行识别,检测,分割等。在对计算机进行处理时,也需要先寻找特征。在让计算机理解图像之前,我们先来熟悉熟悉图像特征。

颜色特征

对于颜色特征,我们在描述它之前,我们首先要选择合适的颜色空间来描述颜色特征,颜色空间包括灰度图,RGB、HIS、HSL、HSV、HSB、YCrCB、CIE、XYZ、CIE、Lab等;其次,我们要采用一定的零花方法将颜色特征表达为向量的形式;最后,还要定义相似度。

RGB颜色特征

色彩三原色应该都听过,及品红(不是蓝色),这是我们在平时所使用的,但是对于计算机来说,他们呢的显示屏使用的则是:红、绿、蓝。他们对应的波长为700nm,546

.1nm,435.8nm。这三种颜色可以根据不同的比例组成不同的颜色,而他们混合后就是白色。

RGB模式是如何定义的喃?根据不同的亮度值,将每种颜色分为0~255,所有颜色可以用三种颜色混合得到。那么一共有(256x256x256=16777216种。例如纯黑色(0,0,0)和纯白色(255,255,255)。

import cv2
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
print(img)

[[[180 204 220] [176 200 219] [171 192 216] ... [144 169 217] [142 168 219] [145 173 223]] [[171 195 211] [167 190 209] [161 183 207] ... [133 157 206] [131 157 207] [133 162 212]] [[165 189 205] [161 184 203] [155 177 201] ... [124 149 197] [122 149 199] [125 154 204]] ...

...

... [ 35 60 113] [ 51 77 130] [ 65 91 144]]]

看上面图片的矩阵输出,你们会发现,它的值都是在0~255之间,这就是因为他们都是色彩三原色构成,组成一个三维矩阵。所以我们如果要对图片操作,就只需要对三维矩阵操作就可以了。博主有一篇文章就是介绍这个的,比如打马赛克,当然,后面的学习会更精彩。言归正传,除了RGB色彩,我们还需要认识其他的颜色空间。

HIS颜色空间

HIS模式是从人的视觉系统出发,用色调,饱和度和亮度来描述色彩。因为该颜色空间非常的逼近人的视觉系统,因此,用HIS来处理图像非常的逼真,当然,除此之外,还有一个原因是现在的很多图像处理算法都是关于HIS的,所以,使用HIS更加方便我们操作。

HIS颜色空间,H指色调或色相,表示光线的波长,取值范围为0~360度;S指饱和度,表示色彩的纯度,取值范围为0~100%(饱和);I指亮度,表示敏感程度,取值范围为0~100%。 如果想实现颜色空间转化,那么我们只需要用到cv2.cvtColor(img,cv2.COLOR_BGR2RGB).第二个参数为转换方式:

函数转换解释文档

点击这个解释文档,就可以得到转换方式。太多了,博主就不一一介绍了,基本上就是COLOR_BGR2**,后面的就是要转换的格式,如RGB,HIS,YCrCb等,当然,opencv2版本则不一样,官网会有介绍。

import cv2
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
cv2.imshow('1',img)
#转换为rgb颜色空间
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('2',rgb)
#转换为hls颜色空间
his=cv2.cvtColor(img,cv2.COLOR_BGR2HLS)
cv2.imshow('3',his)
#转换为灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('4',gray)
cv2.waitKey(0)

 上面的图片展示了不同的颜色空间下的图片,我们可以发现,不同的颜色空间对应的图片也是不同的,所以如果要使用图片,就要根据当时的情况来进行选择。

HSV颜色空间

HSV颜色空间的模型和HIS相似,依据色泽,明暗和色调来定义颜色,其中H代表色度,S代表饱和度,V代表亮度,要注意的是这里的色度、饱和度的定义均和HIS颜色空间不同。该空间比RGB模式更接近于人对色彩的感知,在计算机领域应用最为广泛。

圆锥的顶面对应于亮度V=1(最亮)。色度H由目标位置绕V轴的旋转角给定:0°对应红色,120°对应绿色,240°对应蓝色(正好为RGB三原色)。在HSV空间中,每种颜色和他的补色相差180°。饱和度S取值范围为0~1,对应圆锥顶面的半径为1.要注意的是饱和度为1的颜色,其纯度一般小于1.在圆锥的顶点处,V=0,H和S无定义表示最暗的黑色;在原罪的顶面中心处,S=0,V=1,H无定义,代表最亮的白色。从该点到原点,代表亮度渐暗的灰色,对于这些点,S0,H均无定义。在圆锥顶面的圆周上的颜色,V=1,S=1,即纯色。如图,斜边表示亮度V,每个圆面的半径方向表示饱和度S。

我们来看一下HSV图片的矩阵形式:

BGR:

[[[180 204 220] [176 200 219] [171 192 216] ... [144 169 217] [142 168 219] [145 173 223]] [[171 195 211] [167 190 209] [161 183 207] ... [133 157 206] [131 157 207] [133 162 212]] [[165 189 205] [161 184 203] [155 177 201] ... [124 149 197] [122 149 199] [125 154 204]] ...

...

... [ 35 60 113] [ 51 77 130] [ 65 91 144]]]

HSV

[[[ 18 46 220] [ 17 50 219] [ 14 53 216] ... [ 10 86 217] [ 10 90 219] [ 11 89 223]] [[ 18 48 211] [ 16 51 209] [ 14 57 207] ... [ 10 90 206] [ 10 94 207] [ 11 95 212]] [[ 18 50 205] [ 16 53 203] [ 14 58 201] ... [ 10 94 197] [ 11 99 199] [ 11 99 204]] ...

...

... [ 10 176 113] [ 10 155 130] [ 10 140 144]]]

 颜色直方图

颜色直方图是在图像检索中被广泛采用的颜色特征。他所描述的是不同色彩在整幅图像中所占的比例,而与每种颜色所处位置无关,既无法描述图像中的具体物体。因此,颜色直方图对物体识别基本没有帮助,但特别适合处理难以进行自动分割的图像。

由于颜色空间太大,计算颜色直方图需要将颜色空间划分成若干个小区间,每个小区间成为直方图的一个bin,这个过程称为颜色量化。然后,通过计算落在每个bin内的像素数量可以得到颜色直方图。颜色量化有多种方式,有向量量化,聚类方法和神经网络方法。最常用的就是向量量化,即将颜色空间的各个维度均匀的进行划分。

颜色直方图特征匹配方法:距离法,中心距法,直方图相交法、参考颜色表法、累加颜色直方图法等。

在OPenCV中,我们使用函数cv2.calcHist()方法计算颜色直方图,此函数的可选参数:图像img、使用的通道channels、使用的掩模mask、大小HistSize和直方图柱的范围ranges。

import cv2
import matplotlib.pyplot as plt
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
#展示原图片
cv2.imshow('',img)
cv2.waitKey(0)
#分为三个通道
color=('b','g','r')
for i,col in enumerate(color):histr=cv2.calcHist([img],[i],None,[256],[0,256])#画图plt.plot(histr,color=col)
plt.show()

上面第一个图象是原图,第二个就是实现对该图像进行颜色直方图的分析的线性图。然后覆盖了源代码。

OpenCV图像色调、对比度变化

毫无疑问,图像的色调、颜色、对比度、明暗度均可以调整,由于物体的类别与颜色关系不大,所以调整图片的色调和颜色也能够作为数据增强的手段之一。比如后面我们要介绍到的物体识别,图像检测等,都会把图像转变为灰色。

我么先来认识一下图像色调变化:


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test2.jpg',cv2.IMREAD_COLOR)
cv2.imshow('原图片',img)
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#改变色调
hsv[:,:,0]=(hsv[:,:,0]+10)%180
#改变饱和度
hsv[:,:,1]=(hsv[:,:,1]+10)%255
#改变明暗度hsv[:,:,2]=(hsv[:,:,2]+10)%255
#转化为RGB格式
img1=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
#显示图片
cv2.imshow('图片调整',img1)
cv2.waitKey(0)

(1)原图                                                                       (2)HSV图片

上面的代码只是简单的对颜色转换进行了实现,大家可以根据博主前面介绍的方法取试验一下,能够将图片转化成各式各样的。好了,本节内容就到此结束了!拜了个拜!

点赞加关注不迷路

相关文章:

传统图像处理之颜色特征

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…...

GPS问题调试—MobileLog中有关GPS关键LOG的释义

GPS问题调试—MobileLog中有关GPS关键LOG的释义 [DESCRIPTION] 在mobile log中,有很多GPS相关的log出现在main log和kernel log、properties文件中,他们的意思是什么,通过这篇文档进行总结,以便在处理GPS 问题时,能够根据这些log快速的收敛问题。 [SOLUTION] 特别先提醒…...

【企业管理】你真的理解向下管理吗?

导读:拜读陈老师一篇文章《不会向下负责,你凭什么做管理者?》,引发不少共鸣,“很多管理者有一种错误的观念,认为管理是向下管理,向上负责。其实应该反过来,是向上管理,向…...

Centos7 硬盘挂载流程

1、添加硬盘到Linux,添加后重启系统2、查看添加的硬盘,lsblksdb 8:16020G 0disk3、分区fdisk /dev/sdbmnw其余默认,直接回车再次查看分区情况,lsblksdb1 8:17 0 20G 0 part4、格式化mkfs -t ext4 /dev/sdb15、挂载mkdir /home/new…...

认识vite_vue3 初始化项目到打包

从0到1创建vite_vue3的项目背景效果vite介绍(对比和vuecli的区别)使用npm创建vitevitevuie3创建安装antdesignvite自动按需引入(vite亮点)请求代理proxy打包背景 vue2在使用过程中对象的响应式不好用新增属性的使用$set才能实现效…...

【Go】cron时间格式

【Go】cron时间格式 Minutes:分钟,取值范围[0-59],支持特殊字符* / , -;Hours:小时,取值范围[0-23],支持特殊字符* / , -;Day of month:每月的第几天,取值范…...

leetcode 55. 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释:可以先跳 1 …...

Linux:文件流指针 与 文件描述符

目录一、文件描述符二、文件流指针三、缓冲区之前讲解过了IO库函数和IO接口,库函数是对系统调用接口的封装,也就是说实际上在库函数内部是通过调用系统调用接口来完成最终功能的。 库函数通过文件流指针操作文件,系统调用接口通过文件描述符操…...

基于FPGA实现正弦插值算法

1、正弦插值的算法分析 1.1 信号在时域与频域的映射关系 在进行正弦算法分析之前,我们回顾一下《数字信号处理》课程中,对于信号在时域与频域之间的映射关系,如下图。 对于上图中的原始信号x(t),使用ADC对信号进行采样&#xff0…...

JavaWeb_会话技术

文章目录会话跟踪技术的概述Cookie概念Cookie工作流程Cookie基本使用发送Cookie获取CookieCookie原理分析Cookie的使用细节Cookie的存活时间Cookie存储中文SessionSession的基本使用概念工作流程Session的基本使用Session的原理分析Session的使用细节Session的钝化与活化Sessio…...

Reactor响应式流的核心机制——背压机制

响应式流是什么? 响应式流旨在为无阻塞异步流处理提供一个标准。它旨在解决处理元素流的问题——如何将元素流从发布者传递到订阅者,而不需要发布者阻塞,或订阅者有无限制的缓冲区或丢弃。 响应式流模型存在两种基本的实现机制。一种就是传统…...

[数据结构]栈的深入学习-java实现

CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈:一种…...

网络编程基础

1 互联网的本质硬件设备有了操作系统,然后装上软件之后我们就能够正常使用了,然后也只能自己使用。像这样,每个人都拥有一台自己的机器,然而彼此孤立。如何才能和大家一起愉快的玩耍?什么是网络?简单来说&a…...

华为OD机试题 - 数列还原(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:数列还原题目输入输出示例一输入输出Code代码解析版权说明华为O…...

10-Oracle存储过程(创建,修改,使用及管理)

本章内容 1、我们为什么要用存储过程? 2、存储过程是如何定义和维护的? 3、我们如何调用存储过程? 4、存储过程中常用的复合数据处理方式及CTE 5、存储过程如何进行异常处理? 6、存储过程如何进行事务处理? 7、我们应如何优化存储过程? 1、我们为什么要用存储过程…...

创建线程的三种方法

文章目录1、创建一个类实现Runnable接口,并重写run方法。2、创建一个类继承Thread类,并重写run方法。3、实现Callable接口,重写call()方法,这种方式可以通过FutureTask获取任务执行的返回值。4、run()方法和start()方法有什么区别…...

第一章---Pytorch快速入门---第三节---pytorch中的数据操作和预处理

目录 1.高维数组 1.1 回归数据准备 1.2 分类数据准备 2. 图像数据 1.torchvision.datasets模块导入数据并预处理 2.从文件夹中导入数据并进行预处理 pytorch中torch.utils.data模块包含着一些常用的数据预处理的操作,主要用于数据的读取、切分、准备等。 常用…...

【代码随想录训练营】【Day38】第九章|动态规划|理论基础|509. 斐波那契数|70. 爬楼梯|746. 使用最小花费爬楼梯

理论基础 动态规划与贪心的区别并不是学习动态规划所必须了解的,所以并不重要。 想要了解动态规划算法题的特点,可以直接做下面三道入门简单题练练手感,找找感觉,很快就能体会到动态规划的解题思想。 总结成一句话就是&#xf…...

华为OD机试题 - 快递货车(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:快递货车题目输入输出示例一输入输出Code解题思路版权说明华为O…...

前端——7.图像标签和路径

这篇文章,我们来讲解一下图像标签 目录 1.图像标签 1.1介绍 1.2实际展示 1.3图像标签的属性 1.3.1 alt属性 1.3.2 title属性 1.3.3 width / height 属性 1.3.4 border属性 1.4注意事项 2.文件夹 2.1目录文件夹和根目录 2.2 VSCode打开目录文件夹 3.路…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

中科院1区顶刊|IF14+:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点

中科院1区顶刊|IF14:多组学MR联合单细胞时空分析,锁定心血管代谢疾病的免疫治疗新靶点 当下,免疫与代谢性疾病的关联研究已成为生命科学领域的前沿热点。随着研究的深入,我们愈发清晰地认识到免疫系统与代谢系统之间存在着极为复…...