失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python+OpenCv笔记(三):修改像素点 感兴趣区域 获取图像属性

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

时间:2021-11-18 05:11:34

相关推荐

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

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

我们可以通过行和列的坐标值获取该像素点的像素值。

对于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笔记(三):修改像素点 感兴趣区域 获取图像属性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。