1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【OpenCV】图像进行数字化操作:像素确定位置 获取像素BGR值 修改像素BGR值 修改指

【OpenCV】图像进行数字化操作:像素确定位置 获取像素BGR值 修改像素BGR值 修改指

时间:2021-04-17 15:16:06

相关推荐

【OpenCV】图像进行数字化操作:像素确定位置 获取像素BGR值 修改像素BGR值 修改指

【基础教程】

【OpenCV】在Python环境下安装OpenCV并检测是否安装成功

【OpenCV】Python OpenCV的基本图像处理操作:读取、显示、保存、获取属性

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

一、 像素

像素是构成数字图像的基本单位。当我们放大图像发现许多个小方块组成的,通常把一个小方块称作一个像素。因此,一个像素是具有一定面积的一个块,而不是一个点。需要注意的是,像素的形状是不固定的;大多数情况下,像素被认为是方形的,但有时也可能是圆形的或者是其他形状的。

1、确定像素的位置

图片是由许多像素组成,我们按照水平方向和垂直方向上进行建立向下的坐标系,通过坐标(x,y)的点位置确定像素的位置。

我们需要注意的一点是,坐标的起始位置都是从0开始,横轴的坐标范围为0~366也就是横轴的像素个数为367个,同理纵轴的像素范围0 ~ 199 那么像素个数为200个。

确定像素的位置:

import cv2image = cv2.imread("./imgs/opencv.jpg")# 打印彩色图像的(像素行数,像素列数,通道数)print("shape =", image.shape) # shape = (200, 367, 3)# 获取坐标为(167,267)的像素px = image[167,267]

这里需要注意一下,图像水平方向对应着像素的列数,而垂直方向对应着像素的行数,图像上我们确定像素位置坐标看作是(X,Y)而代码中输出的则是(Y,X)这个之间关系要区别。

2、获取像素的BGR值

我们先了解一下三基色的概念。人眼能够感知红色、绿色和蓝色这3种不同的颜色,因此把这3种颜色称作三基色。如果将这3种颜色以不同的比例进行混合,人眼就会感知到丰富多彩的颜色。

计算机利用色彩空间对颜色编码。也就是说色彩空间是计算机对颜色进行编码的模型。

以较为常用的RGB色彩空间为例,在RGB色彩空间中,存在3个通道,即R通道、G通道和B通道。其中,R通道指的是红色(Red)通道;G通道指的是绿色(Green〉通道;B通道指的是蓝色(Blue))通道;并且每个色彩通道都在区间[0,255]内进行取值。

通常使用一个三维数组来表示一幅图像中某一个像素的RGB值。

这里需要区分一下像素的BGR值与色彩空间RGB值的顺序是相反的。

RGB图像是指用RGB色彩空间显示的图像,BGR图像是指用BGR色彩空间显示的图像;RGB色彩空间和BGR色彩空间的区别是图像在RGB色彩空间中的通道顺序是R→G→B,在BGR的色彩空间中的通道顺序是B→G→R。

import cv2image = cv2.imread("./imgs/opencv.jpg")# 打印彩色图像的(像素行数,像素列数,通道数)print("shape =", image.shape) # shape = (200, 367, 3)# 获取坐标为(167,267)的像素px = image[167,267]# 坐标(167,267)上的像素的BGR值是: [255 87 110]print("坐标(167,267)上的像素的BGR值是:",px)# 分别获取坐标(167,267)上像素的B通道、G通道和R通道的值。blue = image[167,267,0] #坐标(167,267)上的像素的B通道的值green = image[167,267,1] #坐标(167,267)上的像素的G通道的值red = image[167,267,2] #坐标(167,267)上的像素的R通道的值print("(B,G,R):",(blue,green,red)) # (B,G,R): (255, 87, 110)

这里说明一点:我们先确定了像素的位置,每个像素其实是一个小方块。

我们可以这样理解,一张图片是由一系列的像素组成的二维矩阵,而每一个像素则对应着BGR色彩空间中的BGR通道值,是一个三维数组。其实也就是,二维矩阵的每个元素都是三维数组。

3、修改像素的BGR值

import cv2image = cv2.imread("./imgs/opencv.jpg")print(image)# 打印彩色图像的(像素行数,像素列数,通道数)print("shape =", image.shape) # shape = (200, 367, 3)# 获取坐标为(167,267)的像素px = image[167,267]# 坐标(167,267)上的像素的BGR值是: [255 87 110]print("坐标(167,267)上的像素的BGR值是:",px)image[167,267] = [255,255,255]#把坐标(291,218)上的像素的值修改为[255,255,255]print("坐标(167,267)上的像素修改后的BGR值是",px)cv2.imwrite("./imgs/my_save.jpg",image)

4、修改指定区域内的所有像素

import cv2image = cv2.imread("./imgs/opencv.jpg")cv2.imshow("opencv.jpg", image)# 打印彩色图像的(像素行数,像素列数,通道数)print("shape =", image.shape) # shape = (200, 367, 3)# 显示opencv.jpgfor i in range(150, 200):# i表示横坐标:像素行数for j in range(300, 367):# j表示纵坐标:像素列数image[i, j] = [255, 255, 255] # 把区域内的所有像素都修改为白色cv2.imshow("opencv_demo.jpg", image) # 显示图opencv_demo.jpgcv2.waitKey()cv2.destroyAllwindows() # 关闭所有的窗口时,销毁所有窗口

【OpenCV】图像进行数字化操作:像素确定位置 获取像素BGR值 修改像素BGR值 修改指定区域内像素

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