OpenCV:如何只访问蓝色像素?

时间:2015-02-04 09:35:06

标签: python opencv pixel

documentation,我找到了这个代码示例:

import cv2
import numpy

img=cv2.imread('picture.jpg')  

# Accessing only blue pixel
blue=img[100,100,0]
print blue # it prints 157

有人可以解释一下这句话:blue=img[100,100,0]?我不明白,因为要访问一个像素,我们只需要它的x和y坐标,所以我不明白这里的第三个坐标以及它与蓝色像素的关系。

5 个答案:

答案 0 :(得分:1)

img[100,100,0]返回坐标为[100,100]

的像素的蓝色通道值

要获取整个像素,我们只需运行此img[100,100],它将提供一个BGR列表,例如[157, G, R]

示例:

import cv2
import numpy as np 
img=cv2.imread('photo.png')
px=img[300,300]
print px
blue=img[300,300,0]
print blue

<强>输出继电器:

[47 72 62 ]
47

47是由坐标(300,300)

定义的像素的蓝色通道强度

Antti Haapala

给出了这个答案

答案 1 :(得分:1)

OpenCV中的图像表示为3D numpy ndarray。前两个轴(X和Y)代表像素矩阵。 第三轴(Z)包含颜色通道(B,G,R)。你在这一行做的是通过x,y和z坐标选择一个像素。 img[100,100,0]中的第三个索引(0)是像素颜色值[B,G,R]数组中的第0个元素,因此是您的蓝色通道。 我希望这会有所帮助。

答案 2 :(得分:1)

如前所述,

img [100,100,0]返回坐标为[100,100]的像素的蓝色通道值

前两个数字是像素位置的[row, column]值,而第三个数字是颜色值。由于在这种情况下,我们将颜色值设置为0,因此我们正在访问蓝色值。如果我们将最后一个值从0更改为12,我们将分别访问绿色或红色值。

示例:

px = img[100,100] #we are accessing pixel location at [row,column]
print (px) 

#Accessing the blue, green and red intensity in the image
blue = img[100,100,0]
green = img[100,100,1]
red = img[100,100,2]

#printing intensity 
print (blue) 
print (green)
print (red)

输出:

[57 63 68]
57
63
68

我希望这会有所帮助。

答案 3 :(得分:0)

以上答案还不够深入。如果你想了解img[100, 100, 0]为什么返回蓝色,我们必须检查img对象本身。

img 对象表示为 ndarray。为清楚起见,只需裁剪 5x5 像素的图像并检查它的实际情况。

>>>img.shape
(5, 5, 3)

>>>img
array([[[ 73, 121, 129],
    [ 67, 111, 122],
    [ 62,  97, 111],
    [ 72, 105, 121],
    [ 79, 115, 128]],

   [[ 72, 119, 134],
    [ 73, 119, 134],
    [ 70, 109, 124],
    [ 66, 104, 118],
    [ 63, 107, 118]],

   [[ 80, 125, 143],
    [ 66, 114, 132],
    [ 68, 111, 128],
    [ 63, 103, 117],
    [ 55,  99, 110]],

   [[104, 142, 164],
    [ 76, 122, 137],
    [ 77, 121, 138],
    [ 70, 109, 124],
    [ 57,  97, 109]],

   [[ 80, 117, 135],
    [ 66, 110, 124],
    [ 71, 114, 129],
    [ 86, 123, 137],
    [ 77, 115, 126]]], dtype=uint8)

>>> img[2, 2, 0]
68

答案 4 :(得分:-3)

看起来[100,100,0]不是像素坐标而是BGR颜色坐标。

BGR中的

[100, 100, 0]转换为十六进制的#006464,实际上是蓝色。