《OpenCV 轻松入门:面向 Python》读书笔记

更新日期: 2022-04-12 阅读次数: 6991 字数: 1349 分类: 图像识别

上个月为了学习 PlantCV 做植物图像识别,就找了本 OpenCV 的书《OpenCV 轻松入门:面向 Python》作为基础入门。这本书浅显易懂,非常适合像我这样的 OpenCV 新手阅读。很快翻完,了解了不少基础概念,对看懂代码非常有帮助。今天跟我联调 MQTT 的同事被抓去车间干苦力,闲来无事,我就把这本书的笔记整理了一下。

二值图像

二值图像是指仅仅包含黑色和白色两种颜色的图像。

这种格式下,可以把一张图片理解为只包含 0 或 1 值的二维矩阵。

在 OpenCV 中,最小的数据类型是无符号的8位数。因此,在OpenCV中实际上并没有二值图像这种数据类型,二值图像经常是通过处理得到的,然后使用 0 表示黑色,使用 255 表示白色。

灰度图像

二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。通常,计算机会将灰度处理为256个灰度级,用数值区间[0, 255]来表示。其中,数值“255”表示纯白色,数值“0”表示纯黑色,其余的数值表示从纯白到纯黑之间不同级别的灰度。图像需要使用一个各行各列的数值都在[0, 255]之间的矩阵来表示。

可以想象小时候看的黑白电视,其表现力还是可以的。记得小时候为了保护眼睛,我经常用黑白电视打游戏,完全不影响游戏效果。

彩色图像

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

例如: img[0,0,0]:访问图像img第0行第0列第0个通道的像素值。

rgb 三维数组可以理解为一个三层板子,每层板子存储了一个通道的值。

感兴趣区域(ROI,Region of Interest)

感兴趣区域(ROI)在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest, ROI)。在设定感兴趣区域ROI后,就可以对该区域进行整体操作。例如,将一个感兴趣区域A赋值给变量B后,可以将该变量B赋值给另外一个区域C,从而达到在区域C内复制区域A的目的。

这个地方有趣的是,我一下理解图片是怎么操作的了。例如:

  • 图片打码:就是对一个范围的矩阵进行赋值
  • 人像换脸:就是把 ROI 换成一个特定图片,本质上也是一个矩阵操作

图像属性

获取图像属性在图像处理过程中,经常需要获取图像的属性,例如图像的大小、类型等。这里介绍几个常用的属性。

  • shape:如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一幅图像是灰度图像(或二值图像)还是彩色图像。
  • size:返回图像的像素数目。其值为“行×列×通道数”,灰度图像或者二值图像的通道数为1。
  • dtype:返回图像的数据类型。

位平面分解

在8位灰度图中,每一个像素使用8位二进制值来表示,其值的范围在[0,255]之间。可以将其中的值表示为:value=a7×27+a6×26+a5×25+a4×24+a3×23+a2×22+a1×21+a0×20式中,ai的可能值为0或1。可以看出,各个ai的权重是不一样的,a7的权重最高,a0的权重最低。这代表a7的值对图像的影响最大,而a0的值对图像的影响最小。

a7的权重最高,所构成的位平面与原图像相关性最高,该位平面看起来通常与原图像最类似。● a0权重最低,所构成的位平面与原图像相关性最低,该平面看起来通常是杂乱无章的。

也就是说,每次提取位平面后,要想让二值位平面能够以黑白颜色显示出来,就要将得到的二值位平面进行阈值处理,将其中大于零的值处理为255。

所以,第7个位平面是与原始图像最接近的二值图像。

数字水印

数字水印最低有效位(Least Significant Bit, LSB)指的是一个二进制数中的第0位(即最低位)。最低有效位信息隐藏指的是,将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位,即将载体图像的最低有效位层替换为当前需要隐藏的二值图像,从而实现将二值图像隐藏的目的。由于二值图像处于载体图像的最低有效位上,所以对于载体图像的影响非常不明显,其具有较高的隐蔽性。在必要时直接将载体图像的最低有效位层提取出来,即可得到嵌入在该位上的二值图像,达到提取秘密信息的目的。这种信息隐藏也被称为数字水印,通过该方式可以实现信息隐藏、版权认证、身份认证等功能。例如,如果嵌入载体图像内的信息是秘密信息,就实现了信息隐藏;如果嵌入载体图像内的信息是版权信息,就能够实现版权认证;如果嵌入载体图像内的信息是身份信息,就可以实现数字签名,等等。所以,被嵌入载体图像内的信息也被称为数字水印信息。

色彩空间类型转换

色彩空间类型转换RGB图像是一种比较常见的色彩空间类型,除此以外还有一些其他的色彩空间,比较常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIELab色彩空间、CIELuv色彩空间、Bayer色彩空间等。每个色彩空间都有自己擅长的处理问题的领域,因此,为了更方便地处理某个具体问题,就要用到色彩空间类型转换。色彩空间类型转换是指,将图像从一个色彩空间转换到另外一个色彩空间。

GRAY 色彩空间 GRAY(灰度图像)通常指8位灰度图,其具有256个灰度级,像素值的范围是[0,255]。当图像由RGB色彩空间转换为GRAY色彩空间时,其处理方式如下:Gray=0.299·R+0.587·G+0.114·B上述是标准的转换方式,也是OpenCV中使用的转换方式。

alpha通道

alpha通道在RGB色彩空间三个通道的基础上,还可以加上一个A通道,也叫alpha通道,表示透明度。这种4个通道的色彩空间被称为RGBA色彩空间,PNG图像是一种典型的4通道图像。alpha通道的赋值范围是[0, 1],或者[0, 255],表示从透明到不透明。

可以形象地理解为,由一个三层板,加厚成了四层板。

阈值处理

阈值处理阈值处理是指剔除图像内像素值高于一定值或者低于一定值的像素点。例如,设定阈值为127,然后:

  • 将图像内所有像素值大于127的像素点的值设为255。
  • 将图像内所有像素值小于或等于127的像素点的值设为0。

通过上述方式能够得到一幅二值图像。

自适应阈值处理

有一种改进的阈值处理技术,其使用变化的阈值完成对图像的阈值处理,这种技术被称为自适应阈值处理。在进行阈值处理时,自适应阈值处理的方式通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用该阈值对当前像素点进行处理。与普通的阈值处理方法相比,自适应阈值处理能够更好地处理明暗差异较大的图像。

在一些极端情况下,普通的阈值处理会丢失大量的信息,而自适应阈值处理可以得到效果更好的二值图像。

形态学操作

可用在数种子上,没有平铺开的情况。

腐蚀腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。腐蚀用来“收缩”或者“细化”二值图像中的前景,借此实现去除噪声、元素分割等功能。

其他

我才发现原来数钢管这种功能都属于基本功能。

效果体验

做了一个在线版的 opencv 图像处理微信小程序,欢迎体验

opencv 图像处理微信小程序

tags: OpenCV PlantCV

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式