传统图像处理之颜色特征

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在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图片

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

点赞加关注不迷路

查看全文

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

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

相关文章:

点赞加关注不迷路

传统图像处理之颜色特征

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

Python httplib2异常以及互动方式

1.出现not found import等,可能是未安装httplib2。安装就好了。 2。出现unable to open X server ’ error/import.c/ImportImageCommand/368. 解决方案,在抬头加 #!/usr/bin/python 3。出现SyntaxError: Non-ASCII character ‘\xe8’ in file 的错……

13回归网络:HTTP/2是怎样的网络协议?

本篇文章我们先放下实践,回归网络,深入gRPC底层的HTTP/2协议,去探究一下框架底层网络协议的原理,提升对高性能网络协议的认知,相信读完这篇文章以后,我们就可以了解HTTP/2有哪些优势,为什么gRPC要使用HTTP/2作为底层的传输协议。
在众多研究HTTP/2的博客和资料中,最具……

windows 自带端口转发

使用Portproxy模式下的Netsh命令即能实现Windows系统中的端口转发,转发命令如下:
netsh interface portproxy add v4tov4 listenaddress[localaddress] listenport[localport] connectaddress[destaddress]listenaddress – 等待连接的本地ip地址 listenport – 本……

【19】时序逻辑 – VL21/VL22 根据状态转移表 和 状态转移图写STG程序

先来看一下VL21的题目吧 算了,看不懂,先做下一题
VL22 根据【状态转移图】实现时序电路
最想说的是,这个题目也叫做 【较难】 等级,有点点不适应来。感觉就是信手拈来的哇!!!
1 题目 + 代码 + TestBench
代码
`timescale 1ns/1nsmodule seq_circuit(input ……

wget命令——下载网络文件

wget命令是英文词组”web get“的缩写,用于从指定网址下载网络文件。
wget命令支持如HTTP、HTTPS、FTP等常见协议,可以在命令行中直接下载网络文件。
与curl命令不同,wget仅能用于下载文件。
wget命令语法格式如下:
wget [选项……

Cookie 对象

Cookie对象
1) http协议是一个无连接性的协议(即从服务器上拿到内容后,连接中断)
2)服务器端写入客户端的内容称之为cookie,以明值的方式保存
3)用cookie记录前后之间的状态 1.服务器向客户端……

servlet监听器的使用

监听器 主要学习监听器如何使用,什么时候使用什么样的监听器,以及每个监听器的作用 监听器主要有8个listener和六个event 1.监听一些重要事件的发生, 2.监听器的分类: 1. 上下文监听 a) ServletContextListener:应用上……

forward和redirct的区别

对他们两个的理解我是从Head First Servlet JSP
里面的解释非常容易理解
对于forward就是一个人和另外一个人打电话询问一个事情,这个人不知道,但是,他会把他锁知道的另外一个人的详细的信息反馈给打电话的这个人(在程序中就是……

两种跳转方式的区别

<jsp:include page"included.jsp" flush"true"> <jsp:forward page "nextpage.jsp"/> 前者页面不会转向 include 所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于……

Spring Boot概述(一)

1. SpringBoot 概述
1.1 SpringBoot 概念
SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的……

计算机笔试/面试常见逻辑题/智力题汇总

说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充&#xff0c……

OpenAI文档翻译——搭建第一个自己的ChatGPT应用

这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而……

python以及PyCharm工具的环境安装与配置

这里以Windows为例
Python的安装
当然是到Python官网下载咯,https://www.python.org/downloads/点我直达,如图: 可以下载最新版本,可以下拉找到之前特定的版本安装,如图: 这里先择的是最新版的进行安装……

JavaScript【六】JavaScript中的字符串(String)

文章目录🌟前言🌟字符串(String)🌟单引号和双引号的区别🌟属性🌟 length :字符串的长度🌟 方法🌟 str.charAt(index);🌟 str.charCodeAt(index);🌟 String.fromCharCode(……

获取文件MD5小案例(未拆分文件)

文章目录前端获取MD5后端获取MD5前端获取MD5
1、引入js
<script src"js/spark-md5.min.js" type"text/javascript"></script>注:spark-md5库GitHub链接 2、这里是一个按钮和被隐藏调的<input/>标签 <body><button……

Java 进阶(15)线程安全集合

CopyOnWriteArrayList
线程安全的ArrayList,加强版读写分离。
写有锁,读⽆锁,读写之间不阻塞,优于读写锁。
写⼊时,先copy⼀个容器副本、再添加新元素,最后替换引⽤。
使⽤⽅式与ArrayList⽆异。
示例……

HR:面试官最爱问的linux问题,看看你能答对多少

文章目录摘要Linux的文件系统是什么样子的?如何访问和管理文件和目录?如何在Linux中查看和管理进程?如何使用Linux命令行工具来查看系统资源使用情况?如何配置Linux系统的网络设置?如何使用Linux的cron任务调度器来执行……

vscode开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】

一、开发常用的工具栏选项
1、当前打开的文件快速在左侧资源树中定位: 其实打开了当前的文件已经有在左侧资源树木定位了,只是颜色比较浅 2、打开太多文件的时候,可以关闭 3、设置查看当前类或文件的结构 OUTLINE
相当于idea 查看当前类或接……

数据要素化条件之一:原始性

随着技术的发展,计算机不仅成为人类处理信息的工具,而且逐渐地具有自主处理数据的能力,出现了替代人工的数据智能技术。数据智能的大规模使用需要关于同一分析对象或同一问题的、来源于不同数据源的海量数据。这种数据必须是针对特定对象的记……

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注