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

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型


本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html

在这里插入图片描述


第2章 图像的数据格式

在Python语言中,OpenCV以Numpy数组存储图像,对图像的访问和处理都是通过Numpy数组的操作来实现的。


本章内容概要

  • 介绍Python语言中OpenCV的数据结构,学习获取图像的基本属性。
  • 学习使用Numpy数组实现图像的创建、复制、裁剪、拼接、拆分与合并的方法。
  • 学习使用查找表(LUT)快速实现像素值的替换。

2.1 图像属性与数据类型


2.1.1 图像颜色分类

按照图像颜色分类,图像可以分为二值图像、灰度图像和彩色图像。

  • 二值图像:只有黑色和白色两种颜色的图像。每个像素点的像素值可以用0/1或0/255表示,0表示黑色,1或255表示白色。
  • 灰度图像:只有灰度的图像。每个像素点的像素值可以用8bit数字[0, 255]表示灰度级,如0表示纯黑,255表示纯白。
  • 彩色图像:彩色图像可以采用蓝色(B)、绿色(G)和红色(R)三个颜色通道的组合来表示。每个像素点可以用3个 8bit 数字[0, 255]分别表示红色、绿色和蓝色的颜色分量,如(0,0,0) 表示黑色,(0,0,255) 表示红色,(255,255,255) 表示白色。

OpenCV使用BGR格式读取图像解码后,按B/G/R顺序存储为多维Numpy数组,而PIL、PyQt、Matplotlib等库使用的是RGB格式。

在数字图像处理中,可以根据需要对图像的颜色通道顺序进行转换,或将彩色图像转换为灰度图像和二值图像。


2.1.2 以Numpy数组表示数字图像

数字图像由像素点组成的矩阵来描述,以多维Numpy数组来表示和处理。

OpenCV在C++语言中定义的Mat类,是最基本的图像存储格式。在Python语言的API中则基于Numpy库来存储和处理多维数组,即以多维Numpy数组来存储和处理图像。在Python语言中,OpenCV对图像的任何操作,本质上都是对多维Numpy数组的操作和运算。

OpenCV中的二值图像和灰度图像用二维数组表示,数组的形状是(h,w),行与列分别表示图像的高度与宽度。数组中每个元素的值表示对应行/列像素点的灰度值。二值图像是特殊的灰度图像,像素值取0/1或0/255。

OpenCV中的彩色图像用三维数组(h,w,ch) 表示,ch=3表示通道数,数据组织形式如图2-1所示。数组中的每个元素对应像素点的某种颜色分量值。

OpenCV颜色通道的顺序为B/G/R,因此img[:,:,0]表示彩色图像img的B通道,img[:,:,1]表示G通道,img[:,:,2]表示R通道。

在OpenCV中,图像的数据结构是Numpy数组,因此Numpy数组的所有属性和操作方法都适用于OpenCV的图像对象。例如:

  • img.ndim:查看图像的维数,彩色图像的维数为3,灰度图像的维数为2。
  • img.shape:查看图像的形状(h,w,ch),即图像的行数(高度)、列数(宽度)和通道数。
  • img.size:查看图像数组元素的总数,即图像像素的数量与通道数的乘积。

2.1.3 图像的数据类型

OpenCV函数对于数据类型有严格要求,错误的数据类型会导致语法错误。

OpenCV中图像数据类型的参数命名格式如下。

CV_{数字位数}{数字类型}C{通道数}

例如,CV_8UC3表示三通道8位无符号整型数据格式的矩阵。

OpenCV数据类型与Numpy数据类型的对照关系如表2-1所示。在图像处理中,最常用的数据类型是8位无符号整型数据CV_8U,对应的Numpy数据类型是uint8。

推荐在调用Numpy库函数时使用Numpy数据类型的名称,而在调用OpenCV函数时使用OpenCV数据类型的名称,以免发生错误。

使用img.dtype可以获得Numpy数组的数据类型,使用img.astype可以把图像的数据类型转换成指定的Numpy数据类型。


【例程0201】图像属性与数据类型转换

本例程使用Numpy数组的操作方法,获取图像属性和数据格式。


# 【0201】图像属性与数据类型转换
import cv2 as cv
import numpy as npif __name__ == '__main__':# 读取图像,支持 BMP、JPG、PNG、TIFF 等常用格式filepath = "../images/imgLena.tif"  # 读取文件的路径img = cv.imread(filepath, flags=1)  # flags=1 读取彩色图像(BGR)gray = cv.imread(filepath, flags=0)  # flags=0 读取为灰度图像# 维数(Ndim)、形状(Shape)、元素总数(Size)、数据类型(Dtype)print("Ndim of img(BGR): {}, gray: {}".format(img.ndim, gray.ndim))print("Shape of img(BGR): {}, gray: {}".format(img.shape, gray.shape))  # number of rows, columns and channelsprint("Size of img(BGR): {}, gray: {}".format(img.size, gray.size))  # size = rows × columns × channelsimgFloat = img.astype(np.float32) / 255print("Dtype of img(BGR): {}, gray: {}".format(img.dtype, gray.dtype))  # uint8
print("Dtype of imgFloat: {}".format(imgFloat.dtype))  # float32

运行结果:

Ndim of img(BGR): 3, gray: 2
Shape of img(BGR): (512, 512, 3), gray: (512, 512)
Size of img(BGR): 786432, gray: 262144
Dtype of img(BGR): uint8, gray: uint8
Dtype of imgFloat: float32

程序说明:
(1) 彩色图像是三维Numpy数组,灰度图像是二维Numpy数组。因此,相同尺寸的彩色图像与灰度图像的像素数量相同,但数组元素的数量不同。
(2) 彩色图像的形状为(h, w, 3),灰度图像的形状为(h, w)。在查看图像高度和宽度时,推荐使用h, w=img.shape[:2],不推荐使用h, w=img.shape。


本书京东优惠购书链接:https://item.jd.com/14098452.html


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/133561857)
Copyright 2023 youcans, XUPT
Crated:2023-10-05

欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html

相关文章:

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型 本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 第2章 图像的数据格式 在P…...

sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第三周测验

课程2_第3周_测验题 目录:目录 第一题 1.如果在大量的超参数中搜索最佳的参数值,那么应该尝试在网格中搜索而不是使用随机值,以便更系统的搜索,而不是依靠运气,请问这句话是正确的吗? A. 【  】对 B.…...

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起,看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重,并生成与人对齐的模型。请记住,您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先,您将从提示数据集…...

iMazing 2.17.10官方中文版含2023最新激活许可证码

iMazing 2.17.10官方中文版是一款iOS设备管理软件,该软件支持对基于iOS系统的设备进行数据传输与备份,用户可以将包括:照片、音乐、铃声、视频、电子书及通讯录等在内的众多信息在Windows/Mac电脑中传输/备份/管理。 iMazing 2.17.10官方中文…...

如何在windows系统环境下使用tail命令查看日志

答案是: 使用tail for Windows工具 tail for Windows 是便携式软件不需要安装,它可用于显示文件的最后一行并跟踪/监视文件的更改。 下载地址: https://tail-for-windows.en.softonic.com/ 点击直接下载 解压使用 解压后需将tail.exe放入 c:…...

设计模式——访问者模式

访问者模式是什么? 表示一个作用于某对象结构中的各元素的操作,它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作 访问者模式解决什么问题? 男女在不同情境下表现的不同 abstract class Person {protected String action…...

一文读懂UTF-8的编码规则

之前写过一篇文章“一文彻底搞懂计算机中文编码”里面只是介绍了GB2312编码知识,关于utf8没有涉及到,经过查询资料发现utf8是对unicode的一种可变长度字符编码,所以再记录一下。 现在国家对于信息技术中文编码字符集制定的标准是《GB 18030-…...

二叉树题目:路径总和 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:路径总和 II 出处:113. 路径总和 II 难度 4 级 题目描述 要求 给你二叉树的根结点 root \tex…...

Qt model/view 理解01

在 Qt 中对数据处理主要有两种方式:1)直接对包含数据的的数据项 item 进行操作,这种方法简单、易操作,现实方式单一的缺点,特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作,如果现实方式改…...

c与c++中的字符串

在c中,string本质上是一个类; string与char *有些区别: char*是一个指针;string是一个类,类内封装了char*,管理这一个字符串,是一个char*的容器 在使用string类型时,要加上其头文…...

Android 获取IP地址的Ping值 NetworkPingUtils

项目里需要对动态配置的Ip列表都去ping下延迟,取出其中最小的三个进行随机取值然后去连接,倒腾了一下午终于搞出来了! 需求实现思路: 1.找到方法去ping IP地址; 2.同时去Ping,不能让用户等待&#xff1b…...

数据集笔记:OpenCelliD(手机基站开放数据库)

下载数据的方式可见:【数据获取】全球最大手机基站开源数据库 1 读取数据 import pandas as pdpd.read_csv(C:/Users/16000/Downloads/454.csv/454.csv,headerNone,names[radio,mcc,net,area,cell,unit,lon,lat,range,samples,changeable1,created1,updated,AveSi…...

Windows电脑多开器的使用心得分享

Windows电脑多开器是一种非常实用的软件工具,它可以让我们在同一个电脑上同时运行多个不同的应用程序,从而提高我们的工作和学习效率。以下是我在使用Windows电脑多开器时的一些心得分享: 确保你的电脑配置足够强大 多开软件需要消耗大量的…...

Android Studio实现简易计算器(带横竖屏,深色浅色模式,更该按钮颜色,selector,style的使用)

目录 前言 运行结果: 运行截屏(p50e) apk文件 源码文件 项目结构 总览 MainActivity.java drawable 更改图标的方法: blackbutton.xml bluebuttons.xml greybutton.xml orangebuttons.xml whitebutton.xml layout 布…...

虚拟机通过nat模式端口映射实现内网穿透

虚拟机通过nat模式端口映射实现内网穿透 1.网络状态 windows虚拟主机的IP为局域网的私有IP192.168.1.7linux的虚拟主机IP为nat的172.36.4.1062.linux修改nat模式的端口映射 3.windows宿主机防火墙添加规则,(或者直接关闭公共网络防火墙,不安全&#xf…...

计算机网络(六):应用层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络(第7版)-谢希仁 1. 应用层概述 应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分 早期基于文本的应用 (电子邮件、远程登…...

Sublime Text 4 for Mac激活下载

Sublime Text for Mac是一款适用于Mac平台的文本编辑器。它具有快速的性能和丰富的功能,可以帮助用户快速进行代码编写和文本编辑。 软件下载:Sublime Text 4 for Mac激活下载 该软件具有直观的界面和强大的功能,包括多行选择、代码折叠、自动…...

存在负权边的单源最短路径的原理和C++实现

负权图 此图用朴素迪氏或堆优化迪氏都会出错,floyd可以处理。 负环图 但floyd无法处理负权环,最短距离是无穷小。在环上不断循环。 经过k条边的最短距离(可能有负权变) 贝尔曼福特算法(bellman_ford)就是解决此问题的。 原理 …...

15-自动化测试——理论知识

目录 1.什么是自动化测试? 2.常见的自动化测试分类 2.1.单元测试(Java、Python) 2.2.接口测试(Java、Python) 2.3.UI测试(移动端、网站) 3.如何实施自动化测试? 4.自动化测试…...

学信息系统项目管理师第4版系列17_干系人管理

1. 项目经理和团队管理干系人的能力决定着项目的成败 2. 干系人满意度应作为项目目标加以识别和管理 3. 发展趋势和新兴实践 3.1. 识别所有干系人,而非在限定范围内 3.2. 确保所有团队成员都涉及引导干系人参与的活 3.3. 定期审查干系人群体,可与单…...

专业PDF编辑阅读工具PDF Expert mac中文特点介绍

PDF Expert mac是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 PDF Expert mac软件特点 PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动、旋转、缩放、裁剪等操作…...

处理机调度的概念,层次联系以及七状态模型

1.基本概念 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。 这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。 2. 三个层次 1.高级调度(作业调度) 高级调度(作业…...

PS 图层剪贴蒙版使用方法

好 我们先打开PS软件 后面我们需要接触图框工具 在学习图框工具之前 先要掌握剪贴蒙版 这里 我们先点击左上角文件 然后选择新建 我们先新建一个画布出来 然后 我们点击 箭头指向处 新建一个空白图层 点击之后 会就多出一个空白图层 我们在这里 找到 矩形选框工具 然后 …...

总结1008

今日有些小摆烂,在家学习的日子,确实感觉不如在学校好,无论是在时间上,还是在效率上。在家复习效果因人而异吧,都到这个关键阶段了,可不能掉链子啊,明天势必要拿出100%的状态,心静不…...

软件工程从理论到实践客观题汇总(头歌第九章至第十七章)

九、软件体系结构设计 1、软件体系结构设计概述 2、软件体系结构模型的表示方法 3、软件体系结构设计过程 4、设计初步的软件体系结构 5、重用已有软件资源 6、精化软件体系结构 7、设计软件部署模型 8、文档化和评审软件体系结构设计 十、软件用户界面设计 1、用户界面设计概…...

ubuntu与win之间共享文件夹

ubuntu上设置共享文件夹 第一步:点击【设置】或【虚拟机弹窗下面的【设置】选项】 第二步:进入【虚拟机设置】页面,点击【选项】如下图所示 第三步:启用共享文件:点击【总是启用】第四步:添加共享文件&…...

flink处理函数--副输出功能

背景 在flink中,如果你想要访问记录的处理时间或者事件时间,注册定时器,或者是将记录输出到多个输出流中,你都需要处理函数的帮助,本文就来通过一个例子来讲解下副输出 副输出 本文还是基于streaming-with-flink这本…...

Java数据结构————队列

一 、队列 在Java中,Queue是个接口,底层是通过链表实现的。 只允许在一端进行插入数据操作, 在另一端进行删除数据操作的特殊线性表, 队列具有先进先出FIFO(First In First Out) 。 入队列: 进行插入操作的一端称为…...

办公网络构建

办公网络项目背景 XX州市益智软件科技有限公司是XX市第九职业技术学校校办企业,依托学校人力技术、场地资源,面向市场独立经营、服务社会,主要从事网络设备销售、网络综合布线与网络管理。该公司现租用实训基地二层作为公司的办公经营场地…...

单层神经网络

神经网络 人工神经网络(Artificial Neural Network,ANN),简称神经网络(Neural Network,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。1943年,McCulloc…...