从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坐标,所以我不明白这里的第三个坐标以及它与蓝色像素的关系。
答案 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)
定义的像素的蓝色通道强度 给出了这个答案答案 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
更改为1
或2
,我们将分别访问绿色或红色值。
示例:
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颜色坐标。
[100, 100, 0]
转换为十六进制的#006464
,实际上是蓝色。