OpenCV中确定像素位置及获取、修改像素BGR值讲解及演示(Python实现 附源码)

需要源码和图片集请点赞关注收藏后评论区留言~~~

像素是图像的最小单位。每一幅图像都是由M行N列的像素组成的,其中每一个像素都存储一个像素值。以灰度图像为例,计算机通常把灰度图像的像素处理为256个灰度级别,256个灰度级别分别使用区间[0, 255]中的整数数值表示。其中,“0”表示纯黑色;“255”表示纯白色

内容结构如下

通常把一个小方块称作一个像素,因此,一个像素是具有一定面积的一个块,而不是一个点,需要注意的是,像素的形状是不固定的,大多数情况下,像素被认为是方形的,但有时也可能是圆形的或者是其他形状的 

 

一、确定像素的位置

 

用“画图”工具打开图4.1

 可以在下方看到219×292像素 即水平方向的像素是219个,垂直方向的像素是292个

接下来我们打印这个位置坐标的像素 注意像素坐标表示方法是(y,x)索引从0开始

import cv2

image = cv2.imread("2.1.jpg") # 读取D盘根目录下的2.1.jpg
px = image[291, 218] # 坐标为(291, 218)上的像素
print(px)

 二、获取像素的BGR值

从上图可以看出,像素的值由三个坐标表示,下面我们对这三个数值进行讲解

我们将红色 绿色和蓝色三种颜色称为三种基色,如果将这三种颜色以不同的比例进行混合,人眼就会感知到丰富多彩的颜色

在RGB色彩空间中,存在三个通道,即R通道,G通道和B通道,分别指代红色通道,绿色通道和蓝色通道,都在区间(0,255)内取值

这样 计算机利用三个色彩通道的不同组合来表示不同的颜色

 

但是在OpenCV中是BGR色彩空间,即打印的顺序是蓝色 绿色 红色 

 如果想单独获得BGR通道的值 那么可以执行如下代码

blue=image[291,218,0]

其中最后一个数值0表示B通道

1表示G通道

2表示R通道

三、修改像素的BGR值

 对于BGR色彩空间的值,当每个像素的BGR的三个数值相等时,就可以得到灰度图像,其中BGR=0为纯黑色,BGR=255为纯白色

下面修改指定区域内的所有像素

可见我们将图片右下角全部修改为了白色

 代码如下

import cv2

image = cv2.imread("4.1.jpg")
cv2.imshow("4.1", image) # 显示图4.1
for i in range(241, 292): # i表示横坐标,在区间[241, 291]内取值
    for j in range(168, 219): # j表示纵坐标,在区间[168, 218]内取值
        image[i, j] = [255, 255, 255] # 把区域内的所有像素都修改为白色
cv2.imshow("4.8", image) # 显示图4.8
cv2.waitKey()
cv2.destroyAllWindows() # 关闭所有的窗口时,销毁所有窗口

 创作不易 觉得有帮助请点赞关注收藏~~~

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
你可以使用OpenCV的cv2.inRange()函数来选择指定的RGB颜色范围,然后使用cv2.bitwise_and()函数将这些颜色与原始图像进行逐像素的“与”操作,以获得仅包含指定颜色的输出图像。具体步骤如下: 1. 将原始图像转换为RGB颜色空间 ```python img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) ``` 2. 定义指定颜色的范围 ```python lower_color = np.array([Rmin, Gmin, Bmin]) upper_color = np.array([Rmax, Gmax, Bmax]) ``` 其,Rmin, Gmin, Bmin, Rmax, Gmax, Bmax 分别是 RGB 颜色的最小和最大。 3. 使用cv2.inRange()函数选择指定颜色范围内的像素 ```python mask = cv2.inRange(img, lower_color, upper_color) ``` 4. 使用cv2.bitwise_and()函数将选择的颜色与原始图像进行逐像素的“与”操作 ```python output = cv2.bitwise_and(img, img, mask=mask) ``` 其,第一个参数是原始图像,第二个参数是原始图像,最后一个参数是指定颜色范围内的像素。 5. 将输出图像转换回BGR颜色空间 ```python output = cv2.cvtColor(output, cv2.COLOR_RGB2BGR) ``` 完整代码示例: ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('image.jpg') # 将图像转换为RGB颜色空间 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 定义指定颜色的范围 lower_color = np.array([0, 0, 200]) upper_color = np.array([50, 50, 255]) # 使用cv2.inRange()函数选择指定颜色范围内的像素 mask = cv2.inRange(img, lower_color, upper_color) # 使用cv2.bitwise_and()函数将选择的颜色与原始图像进行逐像素的“与”操作 output = cv2.bitwise_and(img, img, mask=mask) # 将输出图像转换回BGR颜色空间 output = cv2.cvtColor(output, cv2.COLOR_RGB2BGR) # 显示输出图像 cv2.imshow('output', output) cv2.waitKey(0) cv2.destroyAllWindows() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值