像素是图像构成的基本单位,需要清晰的了解其在opencv-python的ndarray中如何存储以及如何处理的。
在opencv-python中,通常使用numpy的ndarray来存储图片数据。cv2.imread()的返回值的数据类型即为: <class 'numpy.ndarray'>
那具体是怎么存储的呢? ndarray的各个维度和图片的长宽,BGR等是如何对应的?下面就谈一谈。
1. 像素的存储方式:
1.1:灰度图:
opencv中最小的数据类型是无符号8位数。灰度图中每个像素使用8位存储空间。取值范围0-255.
import cv2
data = cv2.imread("images/test1.webp", cv2.IMREAD_GRAYSCALE)
print("type is:",type(data))
print("Shape:", data.shape)
cv2.imshow("RGB", data)
cv2.waitKey()
cv2.destroyAllWindows()
type is: <class 'numpy.ndarray'>
Shape: (576, 1024)
获取指定图片数据,图像转变为单通道灰度图片。
可以看到,imread()返回的ndarray的shape是(576, 1024)。即(行数,列数)
这个ndarray的每个元素,就是某个像素的灰度值。
例如:
data[0][100] = 255 或者:
data[0,100] = 255
就是把第0行,第100列那个点的像素值修改为白色。
data[30] =255
则表示把第30行全变为白色。(使用到广播)
2. BGR图片:
BGR格式中,每个像素点则需要3个uint8来表示。
import cv2
#data = cv2.imread("images/test1.webp", cv2.IMREAD_GRAYSCALE)
data = cv2.imread("images/test1.webp", cv2.IMREAD_COLOR)
print("type is:",type(data))
print("Shape:", data.shape)
cv2.imshow("RGB", data)
cv2.waitKey()
cv2.destroyAllWindows()
type