鼠标光标在画图工具打开的图像上移动,左下角可以看到鼠标光标的坐标,如下图所示。
上图右下角可以看到图像大小是 342 × 345 像素,也就是说 x 轴大小是342像素,在OpenCV的坐标概念中, x 轴坐标是0~341; y 轴大小是345像素,在OpenCV的坐标概念中, y 轴坐标是0~344。
有了上述概念,这一节将介绍读取与修改特定像素坐标BGR值的方法。
参考ch2_1.py第4行,使用下列指令读取图像。
img = cv2.imread(“jk.jpg”, cv2.IMREAD_GRAYSCALE)
假设想获得(169, 118)的BGR值(这是采用OpenCV坐标概念),可以使用以下指令。
px = img[169, 118]
上述用灰度图像读取时,返回的是Numpy模块的uint8数据类型。
程序实例 ch2_3.py: 列出灰度图像OpenCV坐标(169, 118)的BGR值和此值的数据类型。
执行结果
参考ch2_2.py第4行,使用如下指令读取图像。
img = cv2.imread(“jk.jpg”)
假设想获得(169, 118)的BGR值(这是采用OpenCV坐标概念),可以使用如下指令。
px = img[169, 118]
上述用彩色图像读取时,返回的是Numpy模块的 数组数据类型 (numpy.ndarray)。
程序实例 ch2_4.py: 列出彩色图像OpenCV坐标(169, 118)的BGR值和此值的数据类型。
执行结果 BGR通道的值分别是45、112、191。
除了上述方法,也可以一次获得一个通道的值,方法如下。
blue = img[pt_y, pt_x, 0] # B通道值 green = img[pt_y, pt_x, 1] # G通道值 red = img[pt_y, pt_x, 2] # R通道值
程序实例 ch2_5.py: 列出OpenCV坐标(169, 118)的BGR通道各个值。
执行结果
前面所述实例可以使用下列方式获得指定图像像素的BGR值。
px = img[169, 118]
假设需要更改指定图像像素的值,可以使用如下指令设定此值。
px = [blue, green, red]
程序实例 ch2_6.py: 将OpenCV坐标(169, 118)的BGR通道值设为[255, 255, 255](白色效果)。
执行结果
上述实例只修改了单一像素,读者不容易看出来,下面实例笔者将修改一个区域,读者可以做一下比较。
程序实例 ch2_7.py: 将jk.jpg图像右下方50×50像素区间设定为白色。
执行结果
习题
请调整ch2_7.py,改为下方显示黄色横条。