python+OpenCv笔记(三):修改像素点、感兴趣区域、获取图像属性

一、获取并修改图像中的像素点

  1. 我们可以通过行和列的坐标值获取该像素点的像素值。
    对于BGR图像,它返回一个蓝,绿,红值的数组。
    对于灰度图像,仅返回相应的强度值。
    使用相同的方法对像素值进行修改。
    代码示例如下:
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)

  1. 当我们想更改某一特定像素的蓝色(红色/绿色)值时,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

python+OpenCv笔记(三):修改像素点、感兴趣区域、获取图像属性_第1张图片
确保两个区域在大小上一致,如果不一致,NumPy会报错

三、获取图像的属性

属性 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)

你可能感兴趣的:(OpenCV,(Python),opencv,python,计算机视觉)