计算机视觉基础__图像特征

news2024/11/15 2:19:25

计算机视觉基础__图像特征

本篇目录:

一、前言

二、位图和矢量图概念

三、图像的颜色特征

四、RGB 颜色空间

五、HSV 颜色空间

六、HLS 颜色空间

七、实例代码

八、参考资料



一、前言

  传统图像处理,需要找出图片中的关键特征,然后对这些特征进行识别,检测,处理,调整等。

  通过人工智能计算机视觉处理进行图像处理时,也同样需要先寻找出图像的特征。要正确通过计算机处理图片,我们就需要先了解图像的特征是什么。

二、位图和矢量图概念

  我们先来了解一下两个概念:位图和矢量图。

  •   位图:位图图像(bitmap),亦称为点阵图像或栅格图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。

       位图的特点是可以表现色彩的变化和颜色的细微过渡,产生逼真的效果,缺点是在保存时需要记录每一个像素的位置和颜色值,占用较大的存储空间。
  •   矢量图:就是使用直线和曲线来描述的图形,构成这些图形的元素是一些点、线、矩形、多边形、圆和弧线等,它们都是通过数学公式计算获得的,具有编辑后不失真的特点。矢量图以其轮廓清晰、色彩明快尤其是可任意缩放并保持图像视觉质量等特性受到许多设计者的青睐。

      矢量图最明显的特征:矢量图的颜色边缘和线条的边缘是非常顺滑的,无论你是放大或者缩小,颜色的边缘也是非常顺滑,并且非常清楚的。

  矢量图与位图最大的区别是,它不受分辨率的影响。因此在印刷时,可以任意放大或缩小图形而不会影响出图的清晰度,可以按最高分辨率显示到输出设备上。

  没明白?那我们简单用图片来看看区别:

位图矢量图

上图是一张位图和一张矢量图

将图片放大看看:

位图矢量图

  这下看清楚位图和矢量图的区别了吧?

  哎哟,别光看颜色呀,把注意力放在边缘上,对,就是绿色叶子和白色底图的交界处,深绿色描边的地方,在那个位置处:位图图像边缘有锯齿,矢量图图像边缘很光滑,不同的原因是因为位图是由像素点组成的,在指定的分辨率下,位图图像的像素点数量有限,不足以细致的构成和描述图片内容。

  什么?还看不清楚区别?。。。。好吧,那我。。。。换这张图来说明一下:

 位图

局部放大 600% 倍时,图片显示如下:

矢量图

局部放大 600% 倍时,图片显示如下:

  这下全看清楚了是吧?我们来看一下图像的颜色相关知识


 

三、图像的颜色特征

我们先找2张图片:

1、图片a1a.jpg,是颜色偏暗的一张图片。

 我们把这张图片信息打印出来:

import cv2
img=cv2.imread('a1a.jpg',cv2.IMREAD_COLOR)
print(img)

输出结果: 

[[[66 66 66]
  [53 53 53]
  [54 54 54]
  ...
  [54 54 54]
  [53 53 53]
  [66 66 66]]

 [[51 51 51]
  [37 37 37]
  [38 38 38]
  ...
  [38 38 38]
  [37 37 37]
  [51 51 51]]

 [[51 51 51]
  [38 38 38]
  [39 39 39]
  ...
  [39 39 39]
  [38 38 38]
  [51 51 51]]

 ...

 [[50 50 50]
  [38 38 38]
  [39 39 39]
  ...
  [39 39 39]
  [38 38 38]
  [50 50 50]]

 [[50 50 50]
  [38 38 38]
  [39 39 39]
  ...
  [39 39 39]
  [38 38 38]
  [50 50 50]]

 [[64 64 64]
  [52 52 52]
  [53 53 53]
  ...
  [53 53 53]
  [52 52 52]
  [64 64 64]]]

2、图片a1b.jpg,是颜色比较正常的一张图片。

 我们把这张图片信息打印出来:

import cv2
img=cv2.imread('a1b.jpg',cv2.IMREAD_COLOR)
print(img)

输出结果: 

[[[255 255 255]
  [244 244 244]
  [255 255 255]
  ...
  [255 255 255]
  [244 244 244]
  [255 255 255]]

 [[252 252 252]
  [212 212 212]
  [207 207 207]
  ...
  [207 207 207]
  [212 212 212]
  [252 252 252]]

 [[253 253 253]
  [211 211 211]
  [209 209 209]
  ...
  [209 209 209]
  [211 211 211]
  [253 253 253]]

 ...

 [[254 254 254]
  [206 206 206]
  [212 212 212]
  ...
  [212 212 212]
  [206 206 206]
  [254 254 254]]

 [[254 254 254]
  [208 208 208]
  [216 216 216]
  ...
  [216 216 216]
  [208 208 208]
  [254 254 254]]

 [[255 255 255]
  [252 252 252]
  [251 251 251]
  ...
  [251 251 251]
  [252 252 252]
  [255 255 255]]]

两张图片打印出来的信息都是三维矩阵,

研究这些矩阵,我们会发现,它的值都是在0~255之间。这些数字是什么呢?

他们是色彩三原色构成。如果要对图片操作,只需要对三维矩阵操作就可以。

我们来了解一下色彩的三原色。

四、RGB 颜色空间

  RGB三原色是指红绿蓝,是光的三原色,

  三原色是指所有的颜色都有这三种色彩混合而成。(三原色是依据人类视觉定义的,不存在绝对的三原色)。

  根据不同的亮度值,所有颜色可以用三种颜色混合得到。将每种颜色分为0~255,共(256x256x256=16777216种颜色)。

  其中,纯黑色(0,0,0)和纯白色(255,255,255)

  可以看到红绿蓝相加为白色红绿相加黄色,红蓝相加洋红,绿蓝青色(等比)

  实际上,红绿蓝相加不一定为白,只有最亮的红绿蓝相加才是白,否则是不同亮度的灰色。

  红绿等比混合是黄色,红蓝等比混合是洋红。

  红蓝2:1时,颜色会偏红,因此是粉红。
  红绿2:1时,颜色会偏红,因此是橙色。
  蓝绿2:1时,青蓝。
  绿蓝2:1时,青绿。
  纯红色(RGB为255.0.0 的红色),调成黄色。加绿色就可以,一比一配比,+255的绿色
  调成橙色,是1/2的绿色的量,也就是128

  如果单纯需要简单的颜色值,可以参考以下链接:

300+色彩颜色对照表(16进制、RGB、CMYK、HSV、中英文名)

  自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感。而 RGB 颜色空间的三个分量都与亮度密切相关,即只要亮度改变,三个分量都会随之相应地改变,而没有一种更直观的方式来表达。

  人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,所以 RGB 颜色空间是一种均匀性较差的颜色空间。如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的三个分量数值来表示。

  所以,RGB 颜色空间适合于显示系统,却并不适合于图像处理。

五、HSV 颜色空间

  在图像处理中使用较多的是 HSV 颜色空间,它比 RGB 更接近人们对彩色的感知经验。直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。

  在 HSV 颜色空间下,比 BGR 更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。

  • HSV 表达彩色图像的方式由三个部分组成:

  Hue(色调、色相)
  Saturation(饱和度、色彩纯净度)
  Value(明度)


  用下面这个圆柱体来表示 HSV 颜色空间,圆柱体的横截面可以看做是一个极坐标系 ,H 用极坐标的极角表示,S 用极坐标的极轴长度表示,V 用圆柱中轴的高度表示。

  Hue 用角度度量,取值范围为0~360°,表示色彩信息,即所处的光谱颜色的位置。

  表示如下:

  颜色圆环上所有的颜色都是光谱上的颜色,从红色开始按逆时针方向旋转,Hue=0 表示红色,Hue=120 表示绿色,Hue=240 表示蓝色等等。

  在 GRB中 颜色由三个值共同决定,比如黄色为即 (255,255,0);

  在HSV中,黄色只由一个值决定,Hue=60即可。

  HSV 圆柱体的半边横截面(Hue=60):

  •   水平方向表示饱和度,饱和度表示颜色接近光谱色的程度。饱和度越高,说明颜色越深,越接近光谱色饱和度越低,说明颜色越浅,越接近白色。饱和度为0表示纯白色。取值范围为0~100%,值越大,颜色越饱和。
  •   竖直方向表示明度,决定颜色空间中颜色的明暗程度,明度越高,表示颜色越明亮,范围是 0-100%。明度为0表示纯黑色(此时颜色最暗)。


  在Hue一定的情况下,饱和度减小,就是往光谱色中添加白色,光谱色所占的比例也在减小,饱和度减为0,表示光谱色所占的比例为零,导致整个颜色呈现白色。

  明度减小,就是往光谱色中添加黑色,光谱色所占的比例也在减小,明度减为0,表示光谱色所占的比例为零,导致整个颜色呈现黑色。

  HSV 对用户来说是一种比较直观的颜色模型。我们可以很轻松地得到单一颜色,即指定颜色角H,并让V=S=1,然后通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4 S=1 H=240度。要得到浅蓝色,V=1 S=0.4 H=240度。

  HSV 的拉伸对比度增强就是对 S 和 V 两个分量进行归一化(min-max normalize)即可,H 保持不变。

  RGB颜色空间更加面向于工业,而HSV更加面向于用户,大多数做图像识别这一块的都会运用HSV颜色空间,因为HSV颜色空间表达起来更加直观!

简单理解:

  HSV模型中颜色的参数分别是:色调(H),饱和b度(S),亮度(V)。

  •   色调H参数表示色彩信息,即所处的光谱颜色的位置,用一角度量来表示,取值范围为0°~360°。

    若从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。
    它们的补色是:黄色为60°,青色为180°,紫色为300°;

  • 饱和度S:通常取值范围为0%~100% 即 0.0~1.0;
  • 亮度V:通常取值范围为0%(黑)到100%(白)。 即为 0.0(黑色)~1.0(白色)。

六、HLS 颜色空间

  HLS 和 HSV 比较类似,一起介绍。

  HLS 也有三个分量,hue(色相)、saturation(饱和度)、lightness(亮度)。

  HLS 和 HSV 的区别就是最后一个分量不同,HLS 的是 light(亮度),HSV 的是 value(明度)。

  HLS 中的 L 分量为亮度,亮度为100,表示白色,亮度为0,表示黑色;

  HSV 中的 V 分量为明度,明度为100,表示光谱色,明度为0,表示黑色。

  下面是 HLS 颜色空间圆柱体:

  提取白色物体时,使用 HLS 更方便,因为 HSV 中的Hue里没有白色,白色需要由S和V共同决定(S=0, V=100)。而在 HLS 中,白色仅由亮度L一个分量决定。所以检测白色时使用 HSL 颜色空间更准确。

七、实例代码

  (1)、调入显示一张图片

import cv2
img=cv2.imread('a1b.jpg',cv2.IMREAD_COLOR)
cv2.imshow('yuan',img)
cv2.waitKey(0)

运行结果,显示图片如下:

(2)、将图片转换为BGR2RGB颜色空间格式

import cv2
img=cv2.imread('a1b.jpg',cv2.IMREAD_COLOR)
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('rgb',rgb)
cv2.waitKey(0)

运行结果,显示图片如下:

(3)、将图片转换为BGR2HLS颜色空间格式

import cv2
img=cv2.imread('a1b.jpg',cv2.IMREAD_COLOR)
his=cv2.cvtColor(img,cv2.COLOR_BGR2HLS)
cv2.imshow('hls',his)
cv2.waitKey(0)

运行结果,显示图片如下: 

(4)、将图片转换为BGR2GRAY灰度图像颜色空间格式

import cv2
img=cv2.imread('a1b.jpg',cv2.IMREAD_COLOR)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('4Gray',gray)
cv2.waitKey(0)

运行结果,显示图片如下: 

八、参考资料

300+色彩颜色对照表(16进制、RGB、CMYK、HSV、中英文名) 

三分钟带你快速学习RGB、HSV和HSL颜色空间 - 知乎

         推荐阅读:

计算机视觉__基本图像操作(显示、读取、保存)直方图(颜色直方图、灰度直方图)

 语音识别实战(python代码)(一)

 人工智能基础篇

 计算机视觉基础__图像特征

93d65dbd09604c4a8ed2c01df0eebc38.png

 matplotlib 自带绘图样式效果展示速查(28种,全)

074cd3c255224c5aa21ff18fdc25053c.png

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

fe88b78e78694570bf2d850ce83b1f69.png

cb4b0d4015404390a7b673a2984d676a.png

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦

 Python 3D可视化(一)

 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

e84d6708316941d49a79ddd4f7fe5b27.png

938bc5a8bb454a41bfe0d4185da845dc.jpeg

0a4256d5e96d4624bdca36433237080b.png

 python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

python爱心源代码集锦(18款)

dc8796ddccbf4aec98ac5d3e09001348.jpeg

0f09e73712d149ff90f0048a096596c6.png

40e8b4631e2b486bab2a4ebb5bc9f410.png

 Python中Print()函数的用法___实例详解(全,例多)

 Python函数方法实例详解全集(更新中...)

 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念

09e08f86f127431cbfdfe395aa2f8bc9.png

用代码过中秋,python海龟月饼你要不要尝一口?

 python练习题目录

03ed644f9b1d411ba41c59e0a5bdcc61.png

daecd7067e7c45abb875fc7a1a469f23.png

17b403c4307c4141b8544d02f95ea06c.png

草莓熊python turtle绘图(风车版)附源代码

 ​草莓熊python turtle绘图代码(玫瑰花版)附源代码

 ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

4d9032c9cdf54f5f9193e45e4532898c.png

c5feeb25880d49c085b808bf4e041c86.png

 巴斯光年python turtle绘图__附源代码

皮卡丘python turtle海龟绘图(电力球版)附源代码

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

fea225cb9ec14b60b2d1b797dd8278a2.png

bba02a1c4617422c9fbccbf5325850d9.png

37d6aa3e03e241fa8db72ccdfb8f716b.png

2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特

 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套)

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

5d409c8f397a45c986ca2af7b7e725c9.png

6176c4061c72430eb100750af6fc4d0e.png

1f53fb9c6e8b4482813326affe6a82ff.png

【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)

 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

80007dbf51944725bf9cf4cfc75c5a13.png

1ab685d264ed4ae5b510dc7fbd0d1e55.jpeg

1750390dd9da4b39938a23ab447c6fb6.jpeg

 Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)

 色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)

2023年4月多家权威机构____编程语言排行榜__薪酬状况

aa17177aec9b4e5eb19b5d9675302de8.png

38266b5036414624875447abd5311e4d.png

6824ba7870344be68efb5c5f4e1dbbcf.png

 手机屏幕坏了____怎么把里面的资料导出(18种方法)

【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)

 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决

fffa2098008b4dc68c00a172f67c538d.png

5218ac5338014f389c21bdf1bfa1c599.png

c6374d75c29942f2aa577ce9c5c2e12b.png

 tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

 Tomcat端口配置(详细)

 Tomcat 启动闪退问题解决集(八大类详细)

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

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

相关文章

30天学会《Streamlit》(5)

30学会《Streamlit》是一项编码挑战,旨在帮助您开始构建Streamlit应用程序。特别是,您将能够: 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第6天 - 将…

GO变量的使用

Go变量的使用注意事项 (1)第一种:指定了变量类型,但是声明后若不赋值,则使用默认值 (2)第二种:根据值自行判断我们的变量类型**(类型推导)** var num10.00 …

Python ---> 衍生的数据技术

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 随着人工智能技术的发展,挖掘和分析商业运用大数据已经成为一种推动应用, 推动社会发展起着…

接口优化方案

前言 最近随着国产化热潮,公司的用于营业的电脑全部从windows更换成了某国产化电脑,换成国产化之后,我们系统的前台web界面也由之前的jsp页面重构成vue.所以之前的一体式架构也变成了前后端分离的架构。但是在更换过程后,发现一些…

蓝绿部署技术方案

文章目录 ngx_lua介绍Nginxluangx_lua模块的原理:ngx_lua 模块执行顺序与阶段ngx_lua应用场景 JWTnginx镜像构造lua-redis蓝绿部署特性注意:蓝绿部署架构图nginx配置服务脚本部署使用职责分工 ngx_lua介绍 Nginx Nginx是Web服务器、HTTP反向代理和TCP代…

apache+tomcat实现动静分离和负载均衡

文章目录 ApacheTomcat整合环境通过JK实现动静分离编译mod_jk.so创建测试页面配置jk模块启动apache和tomcat测试。 ApacheTomcat负载均衡配置测试页配置mod_jk文件配置worker.properties测试 ApacheTomcat整合 Tomcat作为一个Servlet容器,可以用于运行Java Web应用…

Unity之c#专题篇——【不动如山核心章】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

连接VPN后无法上网 Windows Route 轻松解决

连接VPN后无法上网 Windows Route 轻松解决 引言文档添加路由 引言 很多时候,我们公司的 VPN 为了不占用公司的外网带宽和安全起见,都会禁止访问外网。我们的电脑连接 VPN 后,所有的网络数据包都会走 VPN,从而导致我们无法访问互…

ES集群配置和分词器(九)

一直在坑自己家人,对,说的就是你,大A. 上一章简单介绍了SpringBoot整合 EasyES (八), 如果没有看过,请观看上一章 一. Windows 集群部署 一.一 服务复制 将 es 复制3份 一.二 配置文件配置 每个服务节点的 config/eslsticsearch.yml 配置…

AANet: CTPA图像中肺动脉栓塞检测的动脉感知网络

AANet: Artery-Aware Network for Pulmonary Embolism Detection in CTPA Images 摘要 肺栓塞(PE)是危及生命的疾病,计算机断层肺血管造影(CTPA)是临床上最好的诊断技术 然而,在CTPA图像中,PE通常表现为血液动脉明亮区域中的黑点&#xff0…

UE4/5多人游戏详解(一、基础理论与局域网内部的连接)

目录 多人游戏理论简单讲解 点对点: 于是,服务端和客户端的概念出现了: 局域网连接: 从第三人称c项目开始 创建项目: 以一个客户端作为监听服务器 3个客户端,在场景后方使用服务器: 局…

leetcode:同构字符串(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构…

数字营销(三)如何确定合适的流量渠道?

一、为什么要确定付费客户特征? 首先营销策略是什么?营销策略,即战略,就是为实现主要流量侧的长期目标,所采取的具体打法和步骤。 比如一个网站的成功离不开获取网站流量和用户信任的建立。除了谷歌 SEO 获取流量&am…

【JavaEE初阶】多线程(一)

摄影分享! 文章目录 认识线程(Thread)概念执行多线程编程创建线程的写法1.继承Thread,重写run2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runable5.使用Lambda表达式 Thread用法…

【ARMv8/v9 MMU 页表配置 01 】

文章目录 1.1 MMU1.1.1 虚拟地址位宽配置1.1.2 页面大小(grandule size)配置1.1.3 AArch64 页表项描述符格式1.1.4 内存属性配置 1.1 MMU 1.1.1 虚拟地址位宽配置 64 位虚拟地址中,并不是所有位都用上,除了高 16 位用于区分内核空间和用户空间的虚拟地…

SpringCloud:ElasticSearch之数据聚合

聚合(aggregations) 可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如何? 实现这些统计功能的比数据…

数组题目总结 -- 双指针

目录① 快慢指针:一. 删除有序数组中的重复项1. 思路和代码I. 博主的做法:II. 东哥的做法:2. 总结二. 删除排序链表中的重复元素(扩展)1. 思路和代码I. 博主的做法:II. 东哥的做法:2. 总结三. 移…

硬件语言Verilog HDL牛客刷题day08 综合部分

1. Johnson Counter 1.题目: 请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下。 电路的接口如下图所示 2.解题思路 2.1 一个简单的状态机的配置。 2.2 注意 起始状态 是 0000 就行 3.解题代码 timescale …

动态内存管理——C语言【进阶】(下)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:进阶C语言,本专栏主要讲解数据存储,进阶指针,动态内存管理&a…

前端面试题 - 计算机网络与浏览器相关

系列文章目录 vue常见面试题总结 htmlcss 面试题总结附答案 初级前端面试题总结(html, css, js, ajax,http) js基础面试题整理(包含ES5,ES6) 文章目录 系列文章目录一、网络协议相关1. 从浏览器地址栏输入url到显示页面的步骤…