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

在这里插入图片描述
确保两个区域在大小上一致,如果不一致,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)

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值