opencv-04 像素处理
在 OpenCV 中,最小的数据类型是无符号的 8 位数。因此,在 OpenCV 中,实际上并没有二值图像这种数据类型,二值图像经常是通过处理得到的,然后使用0表示黑色,使用 255 表示白色。
可以将二值图像理解为特殊的灰度图像,这里仅以灰度图像为例讨论像素的读取和修改。
可以将图像理解为一个矩阵,在面向 Python 的 OpenCV(OpenCV for Python)中,图像就是 Numpy 库中的数组。一个 OpenCV 灰度图像是一个二维数组,可以使用表达式访问其中的像素值。
例如,可以使用 image[0,0]访问图像 image 第 0 行第 0 列位置上的像素点。
第 0 行第 0 列位于图像的左上角,其中第 1 个索引表示第 0 行,第 2 个索引表示第0 列。
为了方便理解,我们首先使用 Numpy 库来生成一个 8×8 大小的数组,用来模拟一个黑色图像,并对其进行简单处理。
使用 Numpy 库生成一个元素值都是 0 的二维数组,用来模拟一幅黑色图像,并对其进行访问、修改。
分析:使用 Numpy 库中的函数 zeros()可以生成一个元素值都是 0 的数组,并可以直接使
用数组的索引对其进行访问、修改。
根据题目要求及分析,编写代码如下:
import numpy as npimg = np.zeros((8,8), np.uint8)print(img)
打印结果:
[[0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0]]
使用函数 zeros()生成了一个 8×8 大小的二维数组,其中所有的值都是 0,数值类型是
np.uint8。根据该数组的属性,可以将其看成一个黑色的图像,我们可以用img.show 函数来显示一下效果
import cv2
import numpy as npimg = np.zeros((8,8), np.uint8)print(img)cv2.imshow('image', img)cv2.waitKey(0)
cv2.destroyAllWindows()
上面的代码因为矩阵相对来说有点小,我们把8,8 改成100,100 来看下效果
接下来我们可以对图像中的像素值 进行修改
,增加
#修改像素值,将第三行第三列的值改为255
img[2,2] = 255
print(‘修改后的像素值’,img)这两行代码
import cv2
import numpy as npimg = np.zeros((8,8), np.uint8)print(img)#修改像素值,将第三行第三列的值改为255
img[2,2] = 255
print('修改后的像素值',img)cv2.imshow('image', img)cv2.waitKey(0)
cv2.destroyAllWindows()
打印的结果
修改后的像素值 [[ 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0][ 0 0 255 0 0 0 0 0][ 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0][ 0 0 0 0 0 0 0 0]]
这个时候的图像就会出现一个白点