C++结合OpenCV:图像的基本表示方法

1.二值图像

        二值图像是指仅仅包含黑色和白色两种颜色的图像。在计算机中,通过一个栅格状排列的数据集(矩阵)来表示和处理图像。例如,图1是一个字母A的图像,计算机在处理该图像时,会首先将其划分为一个个的小方块,每一个小方块就是一个独立的处理单位,称为像素点。接下来,计算机会将其中的白色像素点(白色小方块区域)处理为“1”,将黑色像素点(黑色小方块区域)处理为“0”,以方便进行后续的存储和处理等操作。

图1 字母A的图像

        按照上述处理方式,图2中的字母A在计算机内的存储形式如图2所示。

图2  计算机内字母A储存形式

        上述图像比较简单,图像内只有黑色和白色两种不同的颜色,因此只使用一个比特位(0或者1)就能表示。

2.灰度图像

        二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,图3中的lena图像是一幅灰度图像,它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。

图3 lena图像

        通常,计算机会将灰度处理为256个灰度级,用数值区间[0, 255]来表示。其中,数值“255”表示纯白色,数值“0”表示纯黑色,其余的数值表示从纯白到纯黑之间不同级别的灰度。用于表示256个灰度级的数值0~255,正好可以用一个字节(8位二进制值)来表示。

        表1所示的是部分二进制值所对应的十进制值及灰度颜色。

表1 部分灰度级及所对应的值

        按照上述方法,图4中的图像需要使用一个各行各列的数值都在[0, 255]之间的矩阵来表示。例如,图4就是图3的lena图像中部分区域的数值表示形式。

图4 部分lena图像的数值表示

        有些情况下,也会使用8位二进制值来表示一幅二值图像。这种情况下,使用灰度值255表示白色、灰度值0表示黑色。此时,该二值图像内仅有数值0和数值255两种类型的灰度值(灰度级),不存在其他灰度值的像素点。

3.彩色图像

        相比二值图像和灰度图像,彩色图像是更常见的一类图像,它能表现更丰富的细节信息。神经生理学实验发现,在视网膜上存在三种不同的颜色感受器,能够感受三种不同的颜色:红色、绿色和蓝色,即三基色。自然界中常见的各种色光都可以通过将三基色按照一定的比例混合构成。除此以外,从光学角度出发,可以将颜色解析为主波长、纯度、明度等。从心理学和视觉角度出发,可以将颜色解析为色调、饱和度、亮度等。通常,我们将上述采用不同的方式表述颜色的模式称为色彩空间,或者颜色空间、颜色模式等。

        虽然不同的色彩空间具有不同的表示方式,但是各种色彩空间之间可以根据需要按照公式进行转换。这里仅仅介绍较为常用的RGB色彩空间。在RGB色彩空间中,存在R(red,红色)通道、G(green,绿色)通道和B(blue,蓝色)通道,共三个通道。每个色彩通道值的范围都在[0, 255]之间,我们用这三个色彩通道的组合表示颜色。

        以比较通俗的方式来解释就是,有三个油漆桶,分别装了红色、绿色、蓝色的油漆,我们分别从每个油漆桶中取容量为0~255个单位的不等量的油漆,将三种油漆混合就可以调配出一种新的颜色。三种油漆经过不同的组合,共可以调配出所有常见的256×256×256=16777216种颜色。表2展示了不同的RGB值所对应的颜色。

表2 RGB值及颜色示例

        例如,对于图5左侧的彩色图像,可以理解为由右侧的R通道、G通道、B通道三个通道构成。其中,每一个通道都可以理解为一个独立的灰度图像。左侧彩色图像中的白色方块内的区域对应右侧三个通道的三个矩阵,白色方块左上角顶点的RGB值为(205,89,68)。

图5 图像数据展示

        因此,通常用一个三维数组来表示一幅RGB色彩空间的彩色图像。一般情况下,在RGB色彩空间中,图像通道的顺序是R→G→B,即第1个通道是R通道,第2个通道是G通道,第3个通道是B通道。需要特别注意的是,在OpenCV中,通道的顺序是B→G→R,即:

● 第1个通道保存B通道的信息。

● 第2个通道保存G通道的信息。

● 第3个通道保存R通道的信息。

        在图像处理过程中,可以根据需要对图像的通道顺序进行转换。除此以外,还可以根据需要对不同色彩空间的图像进行类型转换,例如,将灰度图像处理为二值图像,将彩色图像处理为灰度图像等。

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

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

相关文章

6 网关和配置服务器

文章目录 网关模式Spring Cloud网关Spring Cloud网关微服务其他项目的变更运行和测试小结 运行状况Spring Boot Actuator在微服务中包含Actuator 服务发现和负载均衡ConsulSpring Cloud ConsulSpring Cloud负载均衡器网关中的服务发现和负载均衡使用服务发现和负载均衡 环境配置…

数据库开发之事务和索引的详细解析

2. 事务 场景:学工部整个部门解散了,该部门及部门下的员工都需要删除了。 操作: -- 删除学工部 delete from dept where id 1; -- 删除成功 ​ -- 删除学工部的员工 delete from emp where dept_id 1; -- 删除失败(操作过程中…

windows下载官方正版notepad++

一、前言 notepad是一款非常好用的编辑器,简洁、快速、高效。可是很多时候我们想去官网下载时,百度出来的都是一堆第三方下载地址,捆绑流氓软件,要么就是付费,作为一款优秀开源软件,我们必须要知道正确的下…

用Redis实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题: id的规律性太明显受表数据量的限制 全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性: 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

Linux环境变量、export命令、env命令、$符号

一、环境变量 我们所使用的一系列命令本质上就是一个个的可执行程序 不管我们当前的工作目录在何处,命令都可以准确执行,这就是环境变量的作用,是借助环境变量中PATH的值来做到的,PATH记录了系统执行任何命令的搜索路径 环境变量…

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行,在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…

博客的简介

博客的简介 大家可以把这个当做目录,从中选择自己需要的内容进行阅览,欢迎大家一键三连!!!! 话题讨论专栏 点击进入话题讨论专栏 主要文章: 神奇的代码——可随意修改复制页面内容 Python…

力扣(leetcode)第383题赎金信(Python)

383.赎金信 题目链接:383.赎金信 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote…

Mabatis中String类型传参常见问题和解决办法

一、在 MyBatis 的 XML 映射文件中,进行字符串比较时,需要使用单引号将字符串括起来,以表示字符串字面值。这是因为 MyBatis 的表达式语言中,使用单引号表示字符串字面值。 二、当使用双引号括起字符串时,MyBatis 会将…

系统安全及应用

1、基本安全措施 1.1、系统账号清理 在Linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生产的其他大量账号。除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允…

C++学习笔记(二十五):c++ 智能指针

c中的内存的分配和释放是由程序员自己规划。智能指针不需要自己去delete一个new的对象,会自动释放对应的内存空间。unique_ptr:作用域指针,超出作用域后自动释放分配的内存区域。unique是指唯一,不能复制一个unique_ptr指针&#…

Java:Lambda表达式、方法引用

文章目录 1、Lambda表达式1.1 Lambda表达式体验1.2 Lambda表达式的省略形式1.3 Lambda表达式练习 2、方法引用体验3、方法引用符4、引用静态方法5、引用对象的实例方法6、引用类的实例方法7、引用构造方法8、引用数组的构造方法9、方法引用练习9.1 练习19.2 练习29.3 练习3 10、…

【测试开发】自动化测试selenium

文章目录 目录 文章目录 前言 一、自动化测试与selenium selenium介绍 二、如何使用selenium IDE录制脚本 1.安装Selenium IDE 2.seleniumpython环境搭建 3.webdriver API 前言 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条…

优势演员-评论家算法 A2C

优势演员-评论家算法 A2C 优势演员-评论家算法 A2C主要思想目标函数 优势演员-评论家算法 A2C 前置知识:演员-评论家算法:多智能体强化学习核心框架 主要思想 AC 网络结构: 策略网络 - 演员: 这个网络负责根据当前的状态选择动作。它输出的是…

leetcode——杨辉三角

https://leetcode.cn/problems/pascals-triangle/ 杨辉三角: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 核心思想:找出杨辉三角的规律,发…

案例098:基于微信小程序的电子购物系统的设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

Apache Paimon:Streaming Lakehouse is Coming

摘要:本文整理自阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员李劲松(花名:之信)、同程旅行大数据专家,Apache Hudi & Paimon Contributor 吴祥平、汽车之家大数据计算平台…

(一)为什么要选择C++

如果要说C的优点,大部分人可能会说C 跨平台,性能好,如果要说C缺点那估计很多人可以说出一大堆。 没有官方包管理工具没有官方构建工具,虽然cmake 横空出世,有一统江湖的趋势,但是很多项目还是没有cmake支持…

JavaScript-变量数据类型-笔记

1.变量的使用 ① 先声明 再赋值 声明:var 变量名 在声明时不知道数据类型 赋值:变量名 值 在赋值时 知道数据类型 ② 初始化: 在声明变量时 就进行赋值 var 变量名 值 2.变量名在使用时 不能加引号 3…

18.Linux Shell中的mktemp命令使用

文章目录 Linux Shell创建临时文件在工作目录创建临时文件在/tmp 目录创建临时文件3)创建临时目录 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Linux Shell创建临时文件 Linux的/tmp目录用来存放不需要永久保留的文件。大多数Linux发…