机器视觉基础——像素操作
扫描二维码
随时随地手机看文章
一张图像是由很多个像素组合而成的,因为一个像素特别小,而人眼的分辨率也是有限的,所以我们平时看不出来,能够看到的只是一张光滑的图像。从下图中我们可以看到,将一张图像的一部分放大之后,我们会看到一个个小方块,这些小方块便是一个个像素点了。
现在知道了什么是像素点了,那么像素点又是如何组成的呢?其实在计算机中每一种颜色都可以用 R G B 三种颜色分量来进行合成,也就是蓝绿红。比如黄色,我们就可以用 255 的红色、255 的绿色以及 0 的蓝色组合而成。
所以对于每一个像素点来说,计算机存储的实际上就是 R G B 三种颜色的值。对于一个 8 位颜色深度的图片来说,R G B 的每一个颜色分量的取值范围在 0 到 255,共 256 个值,也就是每一个通道都有 256 种颜色可取,那么对于 R G B 三通道组合成的像素点来说,总共就有 256 的 3 次方种颜色可以取,不同颜色的像素点共同组成了我们看到的形形色色的图像。
到这里我们就知道了像素点是如何组成的,我们再来看看我们平时所说的图片的宽度和高度是什么吧。对于下面的图像,我们可以从属性里看到,宽度是 500 像素,高度是 833 像素,这里的高度和宽度就是像素点的个数,也就是说,这个图像在水平方向上有 500 个像素点,在竖直方向上有 833 个像素的,总共有 500 * 833 个像素点,而每个像素点都有 R G B 三个值。
上面就是我们需要提前了解的关于图像像素的一些基本知识点,了解了这些基本概念,我们就可以愉快地进行代码编写了,下面我们一起来看看是如何对图像的某个或者某些像素点进行读取和写入的操作吧。
我们先来看看像素的读取操作,对于像素的读取,我们使用的仍然是 Opencv 库。在读取像素之前,我们先要通过 imread 载入一张图像,然后便可以对某像素点直接进行读取操作了。比如这里我们要读出(100,200)位置处的像素点的 R G B 值。同样,我将使用 Python 与 C# 进行对比展示。先来看看 Python代码是如何实现的吧!
从图中我们可以看出,(100,200)处的像素点的三通道值分别是 77,52,2。这里就完成了像素的读取了,是不是很简单。下面我们再来看看 C# 代码是如何实现的吧。
可以看出,最终结果是一样的,只是在代码编写上略有区别,不过也是特别简单地实现了。下面我们就来看看如何对像素进行写入操作的吧!像素的写入与读取是相反的过程,但是同样特别简单,短短几行代码便可实现。下面我们来通过对像素写入的方式画一个方框吧。
同样最终结果是一样的,只是在代码编写上略有不同。