import numpy as np
import cv2 as cv
source = cv.imread("E:\\qi.png")
img = source.copy()
# 获取某个像素点的值
px = img[100, 100]
print(px) # ---输出---:[173 188 237]
# 仅获取蓝色通道的强度值
blue = img[100, 100, 0]
print(blue) # ---输出---:173
# 修改某个位置的像素值
img[100, 100] = (0, 0, 0)
src = cv.imread("E:\\qi.png")
img = src.copy()
img.itemset((150, 120, 0), 255)
print(img.item(150, 120, 0))
对于修改单个元素,itemset方法比第一次的看到的索引与法要快一些,但就性能而言,这只适合于感兴趣的小区域,当需要操作整个图像或者感兴趣的大区域时,建议使用OpenCV的函数或者NumPy的数组切片,NumPy的数组切片允许指定索引的范围,例如,将一幅图像的所有G(绿色)值都设置为0:,代码如下:
img[:, :, 1] = 0
# 意思是从所有行中和所有列中获取所有像素,并把绿色值(索引为1)设置为0
显示此图像,我们可以看到绿色完全消失了。
src = cv.imread("E:\\qi.png")
img = src.copy()
my_roi = img[0:100, 0:100]
img[300:400, 300:400] = my_roi
属性 | API |
---|---|
形状(行数、列数、通道数) | img.shape |
图像大小 | img.size |
数据类型 | img.dtype |
# 获取图像属性
img_shape = img.shape
img_dtype = img.dtype
img_size=img.size
print(img_shape) # ---输出---:(486, 864, 3)
print(img_dtype) # ---输出---:uint8
print(img_size) # ---输出---:1259712 (即486*864*3)