一、获取并修改图像中的像素点
我们可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝,绿,红值的数组。
对于灰度图像,仅返回相应的强度值。
使用相同的方法对像素值进行修改。
代码示例如下:
import numpy as npimport cv2 as cvsource = 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)
当我们想更改某一特定像素的蓝色(红色/绿色)值时,numpy.array类型提供了一个方便的方法item,它有三个参数:x,y位置以及数组中(x,y)位置的索引。
另一个方法 itemset 可以将某一特定像素的特定通道的值设置为指定的值,itemset有两个参数:三元组(x,y和索引)和 新值。
例如,我们将(150,120)处的蓝色通道值从其当前值更改为255:
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
确保两个区域在大小上一致,如果不一致,NumPy会报错
三、获取图像的属性
# 获取图像属性img_shape = img.shapeimg_dtype = img.dtypeimg_size=img.sizeprint(img_shape)# ---输出---:(486, 864, 3)print(img_dtype) # ---输出---:uint8print(img_size) # ---输出---:1259712 (即486*864*3)
如果觉得《python+OpenCv笔记(三):修改像素点 感兴趣区域 获取图像属性》对你有帮助,请点赞、收藏,并留下你的观点哦!