OpenCV计算机视觉实战(3)——计算机图像处理基础
OpenCV计算机视觉实战(3)——计算机图像处理基础
- 0. 前言
- 1. 像素和图像表示
- 1.1 像素
- 2. 色彩空间
- 2.1 原色
- 2.2 色彩空间
- 2.3 像素和色彩空间
- 3. 文件类型
- 3.1 图像文件类型
- 3.2 视频文件
- 3.3 图像与视频
- 4. 计算机图像编程简史
- 5. OpenCV 概述
- 小结
- 系列链接
0. 前言
计算机视觉不同于计算机图形学和图像管理。计算机视觉侧重于开发使计算机能够理解和解释视觉信息的算法和系统,计算机图形学涉及创建、渲染和操作图像和视觉内容,以便进行显示或模拟,图像管理(压缩)技术用于减小图像文件的大小以便存储和传输。本节将对计算机成像的基础知识进行简要介绍,讨论像素、色彩空间、图像格式和图像处理等内容。
1. 像素和图像表示
在本节中,我们从图像处理的基础知识开始,探讨图像在计算机上是如何表示的,计算机如何管理显示器,屏幕上的不同形状和颜色是如何实现的,不同的图像如何平滑移动并形成动态画面。
1.1 像素
像素是图像中的最小单位,是表示单个点的颜色和亮度的基本构建块。当像素组合在一起时,就创建了一幅图像。像素通常表示显示器或图像传感器上的一个正方形或矩形区域,包含了关于应在特定位置显示或捕获的颜色和光强度的信息。在图像的数字表示中,像素以网格状的模式排列,形成行和列,这个网格中的每个像素都有特定的位置或坐标,比如使用坐标 (x, y)
唯一的标识和操作每个像素。像素用于表示图像的方式如下:
- 颜色信息:数字图像中的每个像素都存储着颜色信息。在
RGB
颜色模型中,一个像素由三个颜色通道表示:红色、绿色和蓝色,每个通道的强度或亮度通常用从0
到255
(8
位二进制值)或更高位深度的数值来表示,从而确定该像素的颜色。通过组合相邻像素的颜色值,形成完整的图像 - 空间排列:像素按照规则的网格模式排列。图像的分辨率由水平和垂直维度中像素的数量确定,比如全高清分辨率的
1920x1080
像素。更高的分辨率通常意味着更多的像素,以产生更细致的细节和更清晰的图像 - 图像显示:当像素显示在屏幕上或打印在纸上时,它们共同组成我们观察到的图像。每个像素根据其颜色和强度值发射或反射光,组合在一起时创建了图像的视觉表示
- 图像处理:像素是各种图像处理和操作技术的基础。如调整大小、裁剪、旋转、调整亮度和对比度、应用滤镜等操作都是在单个像素或像素组上执行的,以修改图像的外观或内容
- 图像存储:数字图像以文件形式存储,最常见的图像文件格式包括
JPEG
、PNG
或BMP
等,存储了像素信息以及额外的元数据和压缩方法。这些文件存储了每个像素的颜色值,能够在显示或进一步处理时重建图像。
理解像素的概念对于处理数字图像至关重要,无论是图像的捕捉、显示还是操作。像素作为形成数字图像中丰富视觉信息的基本单位,共同构成了我们在数字图像中感知到的丰富视觉信息
2. 色彩空间
图像处理中的色彩空间指的是不同的模型或表示方法,定义了颜色在图像中的表示和编码方式。每个色彩空间都有自己一套规则和参数来表示颜色,用于在各种应用程序中准确捕捉、处理和显示颜色,包括摄影、计算机图形和图像分析。
2.1 原色
根据三色视觉理论,人眼有三种类型的色彩感受器(锥体)负责颜色感知。这三种感受器对光的不同波长敏感,它们的反应组合使我们能够感知到丰富的色彩。
在物理学中,原色指的是通过加性色彩混合可以得到所有其他颜色的一组颜色。在物理世界中,原色是红色、绿色和蓝色。自然界中的所有颜色都可以通过以不同比例混合这三种颜色来实现。例如,当我们看到一个柠檬时,我们将其视为黄色并不是因为柠檬本身是黄色的,柠檬吸收了除红色和绿色以外的所有光波,这些反射的红色和绿色光落在我们的眼睛上并刺激了红色和绿色的感受器,这种组合使我们的大脑将颜色处理为黄色。同样,感知品红色涉及对红色和蓝色感受器的刺激。
需要注意的是,物理学中的原色与印刷中使用的减法原色以及其他不同上下文中使用的颜色模型不同。物理学中的原色与三色视觉理论有关,并用于解释颜色感知的生理基础,通过理解原色的性质以及它们如何结合形成其他颜色,可以更好地理解颜色视觉、光吸收和光在各种材料和系统中的行为原理。
2.2 色彩空间
图像处理中的色彩空间指的是不同的模型或表示方法,定义了颜色在图像中的表示和编码方式。每个色彩空间都有自己一套规则和参数来表示颜色,用于在各种应用程序中准确捕捉、处理和显示颜色,包括摄影、计算机图形和图像分析。
2.2.1 加色法
加色法( RGB
色彩空间)是图像处理、计算机图形和显示技术中最广泛使用的颜色模型之一,通过组合三种原色——红色 (R
)、绿色 (G
) 和蓝色 (B
) 来表示颜色。在 RGB
色彩空间中,图像中的每个像素由三个颜色通道表示:红色、绿色和蓝色。每个颜色通道的强度或亮度通常由一个范围从 0
到 255
的 8
位值表示,其中 0
表示无强度(暗),255
表示最大强度(全亮度)。通过调整这三个通道的强度,可以创建任何颜色,这种色彩空间遵循加色法原理。RGB
色彩空间具有以下几个重要特性:
- 加色混合:在
RGB
模型中,通过添加不同强度的红色、绿色和蓝色光来创建颜色。当三种原色的强度都设置为最大值(255, 255, 255)
时,结果是白色。相反,当三种原色的强度都设置为最小值(0, 0, 0)
时,结果是黑色 - 色域:
RGB
色彩空间定义了可以表示的特定范围的颜色,这个颜色范围通常被称为色彩空间的色域。RGB
色彩空间的色域取决于所使用的特定设备或介质的颜色再现能力,比如显示器或打印机 - 颜色混合:通过组合不同强度的红色、绿色和蓝色,可以创建各种颜色。例如,相等强度的红色和绿色产生黄色,而相等强度的红色和蓝色产生洋红色。不同强度的组合可以表示广泛的颜色范围
- 色深度:色深度是用于表示每个颜色通道的位数。例如,
8
位色深度允许每个通道有256
个强度级别,总共可表示1670
万种可能的颜色 ( 25 6 3 256^3 2563)。更高的色深度,如16
位或24
位,提供了更高的精度和更多可用的颜色
RGB
色彩空间能够在各种应用中使用,包括数字摄影、计算机图形、视频处理和显示技术。作为许多图像文件格式(如 JPEG
、PNG
和 BMP
)中颜色表示的基础,其中像素值存储为 RGB
值。需要注意的是,RGB
色彩空间有多种变体,如 Adobe RGB
和 sRGB
,其色域和颜色特性略有不同。这些变体旨在满足特定需求,如为打印提供准确的颜色再现或为网络和数字内容提供标准化的色彩空间。
2.2.2 减色法
CMYK
色彩空间,也称为过程色模型,主要用于印刷和颜色再现。CMYK
代表青色 (C
, cyan
)、洋红色 (M
, magenta
)、黄色 (Y
, yellow
) 和黑色 (K
, key
)。与使用加色混合的 RGB
色彩模型不同,CMYK
色彩模型使用减色混合来实现广泛的颜色范围。
在 CMYK
色彩空间中,从白色背景开始,通过减去不同强度的青色、洋红色、黄色和黑色颜料来创建目标颜色。四种油墨全强度存在时,产生几乎是黑色的深色,而所有油墨的缺失则产生白色。通过调整这四种油墨颜色的百分比,可以为印刷再现出广泛的颜色。CMYK
色彩空间具有以下特性:
- 减色混合:与
RGB
模型不同,CMYK
模型从白色背景(如纸张的颜色)开始,并通过减去或吸收特定波长的光来创建颜色。当四种油墨全强度应用时,它们几乎吸收所有光,产生几乎是黑色的深色 - 色域:与
RGB
色彩空间相比,CMYK
色彩空间的色域较小。这是因为减色墨水的组合不能像加色光混合那样产生相同范围的颜色。因此,一些在RGB
中可以表示的鲜艳和高饱和度的颜色可能无法在CMYK
中准确再现 - 黑色墨水:
CMYK
中的K
代表黑色墨水。将黑色墨水添加到颜色模型中,因为青色、洋红色和黄色墨水的组合不能产生真正的黑色。使用黑色墨水减少了创建深黑色所需墨水的数量,并有助于提高印刷效率 - 颜色分离:在印刷过程中,
CMYK
色彩模型用于将图像分离成四种不同的色板,每种颜色一个,每个色板表示图像该区域的相应墨水颜色的强度。在印刷过程中,这些色板结合使用以重新创建原始的全彩图像 - 从
RGB
转换到CMYK
:在准备图像进行印刷时,通常需要将RGB
图像转换为CMYK
色彩空间,用于确保图像中的颜色经过正确调整,以匹配印刷过程和打印机使用的特定CMYK
色彩配置文件的颜色
需要注意的是,从 RGB
转换到 CMYK
时,由于两种色彩空间之间的色域差异,可能会导致某些颜色精确度或饱和度的损失。因此,在最终打印之前,建议预览并对图像进行任何必要的调整。CMYK
色彩空间广泛应用于各种印刷应用中,包括杂志、宣传册、包装和其他印刷材料。通过准确表示颜色,CMYK
模型确保在最终打印输出中尽可能地再现所需的颜色。
2.2.3 灰度图像
灰度图像,也称为黑白图像,由从黑色到白色的不同强度的灰色组成。与具有多个颜色通道的彩色图像不同(例如 RGB
具有红色、绿色和蓝色通道),灰度图像只有一个通道,表示每个像素的亮度或强度。灰度图像具有以下特性:
- 单通道:灰度图像具有单个通道,通常称为灰度通道或亮度通道。图像中的每个像素由一个值表示,对应于该像素的光强度。在
8
位灰度图像中,值通常从0
(黑色)到255
(白色)变化,中间值表示不同强度的灰色 - 无颜色:灰度图像缺乏颜色信息。相反,它们仅依赖于亮度级别来表示图像内容,简化了图像的表示和解释
- 清晰简洁:灰度图像通常具有简洁和清晰的观感。没有颜色的干扰,灰度图像强调视觉元素,如形状、纹理和对比度,能够有效地展示场景中的色调变化、阴影和高光
- 转换:通过彩色到灰度转换的过程可以根据彩色图像获得灰度图像,有多种算法和技术能够将彩色图像转换为灰度图像。一种常见的方法是通过计算每个像素的亮度,取红色、绿色和蓝色通道的加权平均值,因为人类对绿光更敏感
- 存储和处理:与彩色图像相比,灰度图像需要较少的存储空间和计算资源。由于只有一个强度值通道,灰度图像占用更少的内存,并且通常处理速度更快。适用于不需要颜色信息或在存储和处理效率是重要考虑因素的应用。
灰度图像在摄影、印刷、医学成像、计算机视觉等领域有广泛应用,可用于表示深度图、增强图像对比度、简化图像分析算法,或在视觉媒体中创造经典的黑白影像。
需要注意的是,一些灰度图像可能还包含用于辅助信息的其他通道,例如用于透明度的 Alpha
通道或用于图像分割的灰度掩码,但灰度图像的核心特征是在没有颜色的情况下表示强度值。
2.2.4 其它色彩空间
除了上述色彩空间外,计算机应用程序中还包含其他色彩空间:
HSL
:色调、饱和度、亮度 (HSL
) 色彩空间基于三个参数定义颜色:色调、饱和度和亮度。色调表示颜色在色盘上的位置,饱和度表示颜色的强度或纯度,而亮度表示感知到的亮度HSV
:色调、饱和度、值 (HSV
) 类似于HSL
,但用值代替了亮度。值参数表示颜色的感知亮度,使其更适用于某些图像处理操作,如调整亮度和对比度LAB
:CIE Lab*(LAB)
是一个独立于设备的色彩空间,将颜色信息与亮度信息分开。它由三个通道组成:L
用于亮度,a
和b*
用于颜色信息。LAB
色彩空间通常用于颜色转换和图像分析任务。
当然图像处理中使用的色彩空间远不止这些,每种色彩空间都有其优点和应用。选择合适的色彩空间取决于实际图像处理任务的具体要求。
2.3 像素和色彩空间
像素和色彩空间共同定义了数字图像的颜色表示。色彩空间定义了可以表示的颜色范围,而像素则存储了图像中每个特定点的颜色信息,它们共同构成了数字成像系统中的颜色表示基础。通过结合像素和色彩空间的概念,可以准确地表示、操作和再现数字图像中的颜色。
- 色彩表示:像素根据所使用的色彩空间存储颜色信息。在
RGB
色彩空间中,每个像素保存红色、绿色和蓝色通道的颜色值,这些值确定了每种基本颜色的强度或亮度,它们的组合创建了像素的整体颜色外观。类似地,在CMYK
色彩空间中,像素存储青色、洋红、黄色和黑色通道的颜色值 - 色域:色彩空间定义了色域,表示可以在特定色彩空间内表示的颜色范围。色域指的是可以显示或再现的所有可能颜色的集合,每个像素的颜色值都限制在所选色彩空间的色域内,这意味着它们只能表示该定义范围内的颜色。色域受所用设备或介质的属性和限制的影响,如显示器、打印机或颜色配置文件
- 色彩空间转换:在处理图像时,可能需要在不同的色彩空间之间进行转换。色彩空间之间的转换涉及将像素的颜色值从一个色彩空间映射到另一个色彩空间,同时尽可能准确地保留感知颜色外观。确保在不同色彩空间的设备或系统之间传输图像时,颜色能够正确表示
- 图像处理:像素和色彩空间在图像处理任务中也非常重要。当执行颜色校正、调整亮度/对比度、应用滤镜或其他图像操作时,通常会在指定色彩空间内对单个像素的颜色值进行计算,根据色彩空间的特性精确控制和修改图像的外观
为了更好的理解像素和色彩空间,结合这两种概念创建图像。下示 32x32
的 2D
整数矩阵可以渲染为字母 A
:
矩阵中的每个元素都是一个单一的值,因此图像是一个黑白图像(灰度图像)。
用 (255,0,0)
向量替换 255
值可以得到红色 A
,(0,255,0)
得到绿色 A
,(0,0,255)
得到蓝色 A
。
3. 文件类型
3.1 图像文件类型
图像格式和文件类型种类繁多,本节中我们将讨论常用的流行格式,每种文件类型都有其特性、压缩方法和支持的功能。常见的用于存储图像数据的图像文件格式如下:
JPEG
(Joint Photographic Experts Group
):JPEG
是一种广泛使用的有损压缩格式,通过丢弃一些对视觉影响较小的图像细节,实现了高压缩比。JPEG
支持数百万种颜色,常用于网络图像和数字摄影。由于是有损压缩,反复编辑或重新保存为JPEG
格式可能会导致图像质量下降PNG
(Portable Network Graphics
):PNG
是一种无损压缩格式,支持全色和索引图像,非常适合具有锐利边缘、纯色区域或透明度的图像。PNG
文件并不产生JPEG
文件中的有损压缩伪影,能够保持较高的细节和质量。通常用于网页图形、商标和带有透明度的图像GIF
(Graphics Interchange Format
):GIF
是一种无损压缩格式,支持动画图像和索引颜色。它使用最多256
种颜色的有限调色板,适用于简单的图形、图标和动画。GIF
还支持透明度,允许像素完全透明或完全不透明。然而,GIF
的色深相对较低,并不太适合复杂图像TIFF
(Tagged Image File Format
):TIFF
是一种多功能文件格式,支持无损和有损压缩。TIFF
提供存储高色深图像、多层和元数据的选项,通常用于专业摄影、平面设计和印刷行业,提供灵活性并保持图像质量。然而,与JPEG
或PNG
等格式相比,文件大小通常较大Bitmap
(BMP
):BMP
是一种简单且未压缩的文件格式,用于存储原始像素数据。它支持各种色深,并可以在不产生压缩伪影的情况下保持高质量图像。BMP
文件通常尺寸较大,因此不太适合网络使用,通常用于特定应用,例如一些计算机图形软件或作为图像编辑的中间格式RAW
:RAW
格式是数字相机用于存储相机传感器捕获的未经处理图像数据的专有文件格式。RAW
文件保留最多的信息,并允许进行复杂的后期处理调整。然而,它们往往具有较大的文件大小,并需要专用软件进行查看和编辑。
每种格式都有其优势、压缩率、颜色支持以及与不同软件应用和设备的兼容性。文件格式的选择取决于多种因素,例如预期用途、所需的图像质量、压缩程度、透明度需求以及兼容性要求。
3.2 视频文件
同样,有多种文件类型可以用于存储视频数据,每种文件类型都有其特点、压缩方法和支持的功能。常见的视频文件格式包括:
MP4
(MPEG-4
):MP4
是一种广泛使用的视频文件格式,采用MPEG-4
视频压缩标准。它支持各种音频和视频编解码器,可实现高效压缩和良好的视频质量。MP4
文件与大多数媒体播放器和设备兼容,适用于流媒体、共享和存储视频。MP4
文件还可以包含字幕和元数据AVI
(Audio Video Interleave
):AVI
是微软开发的一种视频格式,可以在单个文件中存储音频和视频数据。AVI
文件可以支持各种编解码器,但文件大小往往较大,并且压缩效率较低。AVI
文件通常用于旧版视频编辑软件和在Windows
系统上进行本地播放MKV
(Matroska Video
):MKV
是一种开源多媒体格式,可以在单个文件中存储多个音频、视频和字幕流。支持各种视频编解码器,并且可以保持高质量的视频和音频,MKV
文件通常用于存储高清和超高清视频内容MOV
(QuickTime Movie
):MOV
是由Apple
开发的一种文件格式,用于存储视频、音频和其他媒体数据。MOV
文件通常与QuickTime
相关联,支持各种编解码器和多个轨道。MOV
文件广泛用于Apple
生态,包括macOS
和iOS
设备。它们可以包含高质量的视频和音频,并且适用于专业应用、视频编辑和多媒体内容分发WMV
(Windows Media Video
):WMV
是微软开发的一种视频文件格式,主要用于在Windows
平台上进行流媒体播放。WMV
文件可以支持各种编解码器,并为高效的流媒体和存储提供良好的压缩。WMV
文件非常适合基于Windows
的系统,在其他平台和设备上的兼容性可能有限FLV
(Flash Video
):FLV
是主要与Adobe Flash Player
相关联的视频文件格式。支持通过互联网进行视频内容的流媒体播放。FLV
文件使用Sorenson Spark
或VP6
编解码器,并且可以提供高效的视频传输。然而,由于对Flash技术的支持逐渐减弱,FLV
变得越来越不常见,并且正在被其他格式如MP4
取代
每种格式都有其优势、压缩率、兼容性和功能。文件格式的选择取决于多种因素,如预期用途、视频质量要求、操作系统、流媒体能力以及与播放设备或编辑软件的兼容性等因素。
3.3 图像与视频
视频本质上是一系列图像快速连续播放而形成的,视频是一系列帧或静止图像,按顺序呈现,以创建运动效果。视频文件和图像包含以下联系:
● 逐帧结构:视频由一系列帧组成,每帧代表一个单独的图像。每帧捕获了特定时刻场景的快照,这些帧以较快速率(通常每秒 24
到 30
帧)连续播放,以创建连续运动效果。
● 图像压缩:视频文件使用多种压缩技术来高效存储和传输帧序列。压缩通过编码帧之间的差异、移除冗余并优化像素数据的存储来减小文件大小,不同的视频文件格式采用不同的压缩算法,以平衡文件大小和视频质量。
● 关键帧:在视频压缩中,关键帧(也称为 I-帧)是完整且独立的帧,可以单独解码。关键帧在视频序列中充当参考点,而随后的帧(称为 P-帧
或 B-帧
)仅存储与前一帧的变化或差异。这种压缩技术通过避免存储每帧的所有像素来减小文件大小。
● 播放:视频文件可以在各种设备和平台上播放。媒体播放器,无论是软件还是硬件,都会解码视频文件的帧,并以快速连续的方式显示它们。重建帧,并以预期帧率显示帧来创建运动效果。
● 编辑和处理:视频编辑软件用于对视频文件中的单个帧进行操作和处理,可以从视频中提取帧,对特定帧应用滤镜,重新排列帧的顺序,甚至用不同的图像替换帧,使其能够精确控制视频的视觉内容。
● 导出静止图像:视频文件也可以导出或保存为单独的图像文件。通过从视频文件中提取帧,可以在视频中的特定时刻获取静止图像。对于创建缩略图、生成宣传材料、捕捉关键时刻或分析单个帧进行视觉分析非常有用。
4. 计算机图像编程简史
图像操作并非是一个独特的软件问题,操纵图像数据的早在计算机出现之前就存在了。电影出现在19世纪末 20
世纪初,早在计算机问世之前就存在了,随着电影的出现,编辑图像和帧以提供更好的观众体验的需求也随之而来。因此,开发人员开发了几种图像处理技术,用于操纵亮度、对比度等参数,这些技术将图像数据视为模拟信号,并使用数学函数执行信号操纵。
与计算机图像处理相比,区别在于计算机图像是数字化的。虽然将这些数字数据转换为模拟信号并执行相同的图像操作是完全可能的,但在数字领域操纵数据通常更为可取。特别是在需要详细和精确的更改时,数字算法通常优于模拟算法。
在老式电视机,使用旋钮可以调节亮度、对比度、锐度、颜色等设置。但是这些旋钮后面没有计算机或 GPU
,图像是使用模拟算法进行操作以达到预期效果的。
在 20
世纪 60
年代,研究人员开始探索数字图像处理技术。早期开发用于基本图像操作(如滤波、边缘检测和降噪)的算法。然而,计算资源有限,处理能力低。在 20
世纪 70
年代,计算机图形学推动了光栅图形系统的发展,这些系统使用像素网格来表示和显示图像。早期的编程语言如 FORTRAN
和汇编语言用来编写图像处理的代码,但重点主要放在图形渲染而不是图像处理上。在 20
世纪 80
年代,计算机视觉和图像分析作为计算机科学的子领域受到关注,研究人员开始探索解释图像的技术,开发了特征提取、对象识别和图像理解的算法,编程语言如 C
和 C++
开始在图像处理任务中流行起来。在 20
世纪 90
年代,图像处理库和 API
开始出现,为开发人员提供了用于图像处理的预构建函数和算法,例如英特尔的图像处理库 (image processing library
, IPL
)、视觉接口库 (vision interface library
, VIL
) 以及 ImageMagick
等,这些库为开发人员提供了进行图像操作的工具,如滤波、变换和色彩空间转换,然而,这些库通常彼此不兼容,功能也不完整。而 OpenCV
的出现,解决了这些问题。
5. OpenCV 概述
OpenCV
(Open Source Computer Vision Library
) 是一个开源的计算机视觉和图像处理库,提供了多样性的功能和算法,旨在为开发实时计算机视觉应用程序提供全面的工具集。OpenCV
最初于 2000
年开发,后作为开源项目发布,使用 C
和 C++
编写,并提供了多种编程语言的接口,包括 Python
、Java
和 MATLAB/Octave
。OpenCV
是跨平台的,可以运行在 Windows
、macOS
、Linux
、Android
和 iOS
上。
OpenCV
提供了多样性的功能和算法,涵盖了计算机视觉和图像处理的各个领域,主要包括:
- 图像和视频
I/O
:OpenCV
能够从文件、摄像头和视频流中读取、写入和处理图像和视频帧 - 图像处理:
OpenCV
提供了常见图像处理操作的函数,如滤波、模糊、调整大小、阈值处理、形态学操作和色彩空间转换 - 特征检测和描述:
OpenCV
支持特征检测算法,如Harris
角点检测、FAST
、SURF
、ORB
和SIFT
,以及特征描述和匹配的方法 - 对象检测和跟踪:
OpenCV
包含预训练模型和用于对象检测和跟踪的函数,如Haar
级联检测器、方向梯度直方图和基于深度学习的方法 - 相机校准:
OpenCV
支持相机校准,以校正镜头畸变并获取用于3D
重建和增强现实应用程序的准确相机参数 - 机器学习:
OpenCV
与流行的机器学习框架(如TensorFlow
和PyTorch
)能够很好的集成,提供了训练和部署机器学习模型的工具,用于图像分类、对象识别和语义分割等任务 - 深度神经网络:
OpenCV
包含dnn
模块,可以与预训练的深度学习模型一起使用,包括AlexNet
、VGG
、ResNet
和YOLO
等流行架构 GUI
和可视化:OpenCV
包含用于创建图形用户界面 (graphical user interface
,GUI
) 和使用绘图工具、注释可视化图像、视频的功能- 机器人和嵌入式系统:
OpenCV
广泛应用于机器人和嵌入式系统中,支持运动检测、手势识别和自主导航等任务
OpenCV
社区提供了大量文档、教程、示例代码和 OpenCV
相关主题的论坛,OpenCV
库仍在不断更新和改进,不断优化并加入新的算法。OpenCV
还可以与其他流行的库和框架集成,如 NumPy
、SciPy
、Matplotlib
和 ROS
(Robot Operating System
),能够利用 OpenCV
的功能与其他库一起进行高级图像处理和分析任务。
OpenCV
在多个领域都有广泛应用,包括机器人、监控、增强现实、医学成像、视频分析等。OpenCV
提供了强大而灵活的工具集,可以处理图像和视频,能够轻松实现各种计算机视觉算法,并轻松构建复杂的应用程序。
小结
在本节中,我们讨论了像素、色彩空间、图像如何使用像素和色彩空间在计算机上呈现,以及图像、视频帧和视频之间的关系。
系列链接
OpenCV计算机视觉实战(1)——计算机视觉简介
OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介
相关文章:
OpenCV计算机视觉实战(3)——计算机图像处理基础
OpenCV计算机视觉实战(3)——计算机图像处理基础 0. 前言1. 像素和图像表示1.1 像素 2. 色彩空间2.1 原色2.2 色彩空间2.3 像素和色彩空间 3. 文件类型3.1 图像文件类型3.2 视频文件3.3 图像与视频 4. 计算机图像编程简史5. OpenCV 概述小结系列链接 0. …...
零基础学Java——第九章:数据库编程(三)
第九章:数据库编程 - ORM框架(下) 在上一部分中,我们学习了ORM框架的基础知识和Hibernate框架。在这一部分中,我们将继续学习其他流行的ORM框架,包括MyBatis和Spring Data JPA。 1. MyBatis框架 1.1 MyB…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式 在创业与数据分析的征程中,每一种商业模式都蕴含着独特的价值与挑战。今天,我们依旧怀揣着共同进步的信念,深入研读《精益…...
vue +xlsx+exceljs 导出excel文档
实现功能:分标题行导出数据过多,一个sheet表里表格条数有限制,需要分sheet显示。 步骤1:安装插件包 npm install exceljs npm install xlsx 步骤2:引用包 import XLSX from xlsx; import ExcelJS from exceljs; 步骤3&am…...
Android 10.0 SharedPreferences in credential encrypted storage are not avai
1.前言 在10.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 2.SharedPreferences in credential encrypted storage are not available …...
面试高频算法:最长回文子串
题目:5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 回文:如果字符串向前和向后读都相同,则它满足回文性;子串:子字符串 是字符串中连续的非空字符序列。 示例 1: 输入&…...
RDK X5 交叉编译OSS\QT\opencv\openssl
RDK X5 交叉编译环境配置 1 资源2 使用vm安装Ubuntu22.043 安装依赖4 安装ide5 下载交叉编译工具6 编译oss库6.1 设置临时环境变量6.2 编译arm版本的openssl6.2 编译arm版本的curl6.1 下载oss源码6.1.1 创建arm-toolchain.cmake6.1.2 修改CMakeLists.txt6.1.3 编译 7 编译openc…...
Python cv2边缘检测与轮廓查找:从理论到实战
在计算机视觉领域,边缘检测与轮廓查找是图像分析的核心技术。本文将结合OpenCV库(cv2模块),从理论原理到代码实战,系统讲解如何通过Python实现这两个关键操作。 一、基础概念解析 1.1 边缘检测的本质 边缘是图像中灰…...
5月7日星期三今日早报简报微语报早读
5月7日星期三,农历四月初十,早报#微语早读。 1、1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列; 2、世界羽联主席巴达玛:中国组织赛事的能力无与伦比; 3、中国首位、亚洲首位!赵心童夺…...
智慧医院的可视化变革:可视化工具助力数字化转型
在科技飞速发展的当下,智慧医院已从概念逐步落地,深刻改变着传统医疗模式。它借助互联网、数字孪生及人工智能等前沿技术,在医疗服务领域掀起革新,涵盖面向医务人员的“智慧医疗”、面向患者的“智慧服务”以及面向医院的“智慧管…...
python+open3d选择点云上的某个点并获取其对应三维坐标
👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… 💫签名:面朝大海,春暖花开! python+open3d选择点云上的某个点并获取其对应三维坐标 1,引言2,效果展示3,点云获取4,程序1,引言 有时候我们只想在点云上获取某个目标的具体坐标,通过程序根据…...
ROS第十三梯:RViz+Marker——自定义几何形状可视化
1)概述 在ROS(Robot Operating System)中,Marker是一种用于在RViz(Robot Visualization)中显示自定义几何形状和注释的工具。Marker是通过visualization_msgs/Marker消息类型发布的。可以在RViz中以各种形式(如点、线、文本、立方体等)显示数据。 2)主要消息格…...
Java高频面试之并发编程-13
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:详解原子性、可见性、有序性 在并发编程中,原子性(Atomicity)、可见性(…...
WSL 的 Ubuntu 子系统中启用图形化界面
sudo chmod w /home sudo apt update sudo apt install cifs-utils 1. 选择合适的 X 服务器 在 Windows 系统上,需要安装一个 X 服务器来处理 WSL 中 Ubuntu 的图形显示。常用的 X 服务器有 VcXsrv 和 X410,这里以 VcXsrv 为例: 从VcXsrv 官…...
项目模拟实现消息队列第二天
消息应答的模式 1.自动应答: 消费者把这个消息取走了,就算是应答了(相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server,消费者这三个部分的 2.针对生产者和消费…...
MySQL OCP和Oracle OCP怎么选?
近期oracle 为庆祝 MySQL 数据库发布 30 周年,Oracle 官方推出限时福利:2025 年 4 月 20 日至 7 月 31 日期间,所有人均可免费报考 MySQL OCP(Oracle Certified Professional)认证考试(具体可查看MySQL OCP…...
SR触发器为什么能够消抖
SR触发器(Set-Reset触发器)能够用于**消抖(Debounce)**,主要是因为它的双稳态特性和对输入信号的锁定能力。机械开关(如按键、拨动开关)在闭合或断开时,由于金属触点的弹性ÿ…...
2025ISCC练武校级赛部分题解WP
Web 战胜卞相壹 <!-- 路过的酒罐王柯洁九段说: --> <!-- 会叠棋子有什么用!你得在棋盘内战胜他!我教你个定式,要一直记得!一直! --> <!-- SGF B[ae];B[ce];B[df];B[cg];B[ag];B[ai];B[ci];…...
Microsoft Azure 在印度尼西亚区域正式上线
微软正式宣布,其首个落地印度尼西亚的云区域——Indonesia Central 已全面上线并正式投入使用!这一区域精心设置了三个可用性区(Availability Zones),每个可用性区均配备独立的电源、冷却系统以及网络设施,…...
day18 python聚类分析对数据集模型性能影响
聚类后的分析:推断簇的类型 知识点回顾: 推断簇含义的2个思路:先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值 作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征…...
vue3的新特性
vue2 data属性和方法名散落于各个位置,量大了不好找 顺序变了,script在最前面 setup vue3中不用this,setup的执行时期比beforeCreate还要早,所以不要用this setup中写代码的特点 必须要有return,才能在上面使用 什么…...
NX二次开发——BlockUI 弹出另一个BlockUI对话框
最近在研究,装配体下自动导出BOM表格中需要用到BlockUI 弹出另一个BlockUI对话框。通过对网上资料进行整理总结,具体如下: 1、明确主对话框、子对话框1和子对话框2 使用BlockUI创建.cpp和.hpp文件,dlx文件内容如下所示 主对话框…...
《Overlapping Experiment Infrastructure: More, Better, Faster》论文阅读笔记
文章目录 1 背景2 三个核心概念3 Launch层:特性发布的专用机制4 流量分发策略和条件筛选4.1 四种流量分发类型4.2 条件筛选机制 5 工具链与监控体系6 实验设计原则7 培训参考与推荐 1 背景 谷歌(Google)以数据驱动著称,几乎所有可…...
【Machine Learning Q and AI 读书笔记】- 05 利用数据减少过拟合现象
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第5篇,对应原…...
前端面试测试题目(一)
一、Vue的双向绑定机制(v-model底层实现原理) Vue的双向绑定核心由 响应式系统 和 指令语法糖 共同实现,具体原理如下: 响应式系统 Vue通过数据劫持和依赖收集实现数据变化到视图的同步: • 数据劫持:在Vue…...
最优化方法Python计算:无约束优化应用——线性回归分类器
一、线性回归分类器 假设样本数据为 ( x i , y i ) (\boldsymbol{x}_i, y_i) (xi,yi),其中 i 1 , 2 , … , m i 1, 2, \dots, m i1,2,…,m。标签 y i y_i yi 取值于 k k k 个整数 { 1 , 2 , … , k } \{1, 2, \dots, k\} {1,2,…,k},从而构…...
【汇正自控阀门集团】签约智橙PLM,智橙助泵阀“以国代进”
签约智橙,汇正阀门的“以国代进”举措 随着阀门市场竞争日益激烈、市场需求日益多样化,无论是出口海外、以国代进,还是进军新能源、造船、油气等投资景气的下游市场,阀门企业能否在快速迭代产品、保持技术领先的同时,…...
【macOS】iTerm2介绍
iTerm2 和 iTerm 是 macOS 上两个不同的终端模拟器,虽然名字相似,但它们是两个独立的项目,且 iTerm2 是 iTerm 的现代化继承者。以下是它们的核心区别和演进关系: 1. 历史背景 项目诞生时间状态开发者iTerm2002 年已停止维护Greg…...
2025年五一假期旅游市场新趋势:理性消费、多元场景与科技赋能
2025年五一假期,国内旅游市场再次迎来爆发式增长,官方数据显示,假期期间国内出游人次达3.14亿,游客总消费1802.69亿元。尽管数据规模亮眼,但深入分析可发现,旅游市场正经历结构性变革——消费行为趋于理性、…...
第3章 模拟法
3.1 模拟法概述 模拟法设计思想 模拟法通过将现实问题抽象成计算机可识别的符号与操作,按逻辑顺序“模拟”其过程,从而得到结果;它不依赖复杂公式或高深技巧,只需理清问题背景与实现步骤即可。 示例:鸡兔同笼问题 题…...
16.状态模式:思考与解读
原文地址:状态模式:思考与解读 更多内容请关注:深入思考与解读设计模式 引言 在开发软件系统时,特别是当对象的行为会随着状态的变化而变化时,系统往往会变得复杂。你是否遇到过这样的情况:一个对象的行为在不同的状…...
ActiveMQ 源码剖析:消息存储与通信协议实现(二)
四、KahaDB 消息存储实现细节 (一)存储原理分析 KahaDB 作为 ActiveMQ 从 5.4 版本开始的默认消息存储引擎,其基于日志文件的存储原理具有独特的设计和优势 。在 KahaDB 的存储目录(如${activemq.data}/kahadb)下&am…...
明远智睿SD2351核心板:工业AIoT时代的创新引擎
在当今工业互联网飞速发展的浪潮中,人工智能(AI)与物联网(IoT)的深度融合正以前所未有的态势重塑着传统制造业的格局。从自动化生产线的精准控制到智能仓储的高效管理,从设备运行的实时监测到产品质量的严格…...
iPhone 和 Android 在日期格式方面的区别
整篇文章由iPhone 和 Android 在日期格式方面有所不同引起,大致介绍了,两种时间标准,以及在 JavaScript 下的格式转换方法。 Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 iPhone 和 Android 在日期格式方面有所不同。其中,iPhone(iOS)使…...
使用VSCode在Windows 11上编译运行项目
使用VSCode在Windows 11上编译运行项目 VSCode是一个功能强大的跨平台代码编辑器,可以很好地支持C/C项目开发。以下是使用VSCode在Windows 11上编译运行此项目的详细步骤。 1. 安装VSCode 访问VSCode官网下载并安装VSCode安装完成后,启动VSCode 2. 安…...
边缘计算,运维架构从传统的集中式向分布式转变
在当今数字化时代,边缘计算的崛起正在改变着运维的格局。随着物联网、5G 等技术的快速发展,越来越多的数据和应用正在向边缘设备迁移,这给运维团队带来了新的挑战和机遇。 一、边缘计算崛起带来的运维挑战 边缘计算将计算和数据存储靠近数据…...
【基础篇】prometheus热更新解读
文章目录 本篇内容讲解热更新参数源码解读本篇总结本篇内容讲解 prometheus热更新源码解读 热更新参数 –web.enable-lifecycle : 代表开启热更新配置 修改配置文件发http请求# curl -X POST -vvv localhost:9090/-/reload * About to connect() to localhost port 9090 (…...
为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例
前端设计专栏 使用纯CSS创建简洁名片卡片的学习实践 在这篇技术博客中,我将分享我的前端学习过程,如何使用纯HTML和CSS创建一个简洁美观的名片式卡片,就像我博客首页展示的那样。这种卡片设计非常适合作为个人简介、产品展示或团队成员介绍…...
汽车服务小程序功能点开发
汽车养护服务功能 智能保养预约:根据车辆品牌、型号及行驶里程,自动推荐保养项目,支持线上预约 4S 店或合作维修厂,选择服务时间与地点。故障诊断与维修:车主上传车辆故障现象,系统智能初步诊断࿰…...
SENSE2020BSI sCMOS科学级相机主要参数及应用场景
SENSE2020BSI sCMOS科学级相机是一款面向宽光谱成像需求的高性能科学成像设备,结合了背照式(Back-Side Illuminated, BSI)CMOS技术与先进信号处理算法,适用于天文观测、生物医学成像、工业检测等领域。以下是其核心特点及技术细节…...
《汽车噪声控制》复习重点
题型 选择 填空 分析 计算 第一章 噪声定义 不需要的声音,妨碍正常工作、学习、生活,危害身体健康的声音,统称为噪声 噪声污染 与大气污染、水污染并称现代社会三大公害 声波基本概念 定义 媒质质点的机械振动由近及远传播&am…...
物流无人机结构与载货设计分析!
一、物流无人机的结构与载货设计模块运行方式 1.结构设计特点 垂直起降与固定翼结合:针对复杂地形(如山区、城市)需求,采用垂直起降(VTOL)与固定翼结合的复合布局,例如“天马”H型无人机&am…...
docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤
备忘:后续偶尔忘记了docker虚拟机与宿主机的端口映射关系,来这里查看即可: docker run -d \ --name baota \ --privilegedtrue \ -p 8888:8888 \ -p 8880:80 \ -p 8443:443 \ -p 8820:20 \ -p 8821:21 \ -v /home/www:/www/wwwroot \ centos…...
D盘出现不知名文件
各位大佬,电脑D盘去年还干干净净的,后来突然就出现了所圈部分的几个不知名文件,请问这是什么东西?是否可以删除?...
Rust 中 Arc 的深度分析:从原理到性能优化实践
在 Rust 的并发编程中,Arc(Atomic Reference Counted) 是一个非常关键的智能指针类型,用于在多个线程之间共享数据的所有权。它通过原子操作维护引用计数,确保在多线程环境下安全地管理堆内存资源。然而,很…...
qsort函数
在本篇中,将深入了解qsort函数的用法。 1.qsort函数的基础知识 该函数是用来排序的,这是一个可以直接用来排序数据的库函数(#include<stdlib.h>),底层使用的是快速排序的方式。 常见的排序方式有: …...
01 一文了解大数据存储框架:数据库、数据仓库、数据集市、数据网格、数据湖、数据湖仓
1. 大数据存储框架 1.1 定义 数据库(Database):数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据仓库(Data Warehouseÿ…...
QT —— QWidget(2)
QT —— QWidget(2) windowTitlewindowIconQt 资源系统 (qrc 机制) 详解基本概念使用方法1. 创建 .qrc 文件 设置背景windowOpacity 我们今天继续来学习QWidget,如果大家上一次的博客还没有看过,可以点击这里: https:/…...
微信小程序预览文件 兼容性苹果
uni.request({url: url,method: GET,header: {Authorization: token,responseType: blob,},responseType: "arraybuffer",success: (res) > {uni.hideLoading()const fs wx.getFileSystemManager(); //获取全局唯一的文件管理器let index url.lastIndexOf("…...