如何在python中获取图像的特定RGB值的像素索引



我使用openCV读取函数导入了彩色图像。

im = cv2.imread('test.jpg')

我正在寻找白色像素的索引,其像素值为 [255, 255, 255]。我知道im实际上是一个3D数组。但奇怪的是,im[0,0] 的值是 [255 255 255],而不是 [255, 255, 255]。im[0,0,0] 是 255。所以[255 255 255]看起来像是一个列表或其他东西,但实际上并不等同于[255,255,255]。

>>> print im[0,0]
[255 255 255]
>>> print im[0,0,0]
255

所以我的问题是:

    [255
  1. 255 255] 和 [255, 255, 255] 有什么区别?
  2. 如何获取所有像素的索引?我应该使用什么搜索算法?
如果要

获取所有白色像素的索引,可以将图像转换为2D数组,然后找到索引

import operator
image = cv2.imread("test.jpg")
img = image.astype('float')
img = img[:,:,0] # convert to 2D array
row, col = img.shape
for i in range(row):
    for j in range(col):
        if img[i,j] == 255:
            x.append(i) # get x indices
            y.append(j) # get y indices
请注意,图像[0,0]显示

2D矩阵,而图像[0,0,0]显示具有0色带的3D矩阵。此元素基本上定义了图像的色带。如果不指定第三个元素,它将为图像的每个色带显示三个值。但是当您提到色带时,它会显示确切的像素值。

注意:无需将图像转换为 2D 数组。您也可以始终为实际数组执行此操作。我这样做只是为了向您解释算法。

你是对的neuxx。 值 [255 255 255] 不等于 [255, 255, 255]。 所以你需要将像素值([255 255 255])转换为数组值([255,

255, 255])进行比较。 所以你需要使用'[:]'将其转换为数组。此外,如果要查找所有白色像素,则可以使用此代码。而像素索引将作为元组存储在列表"White_pix_ind"中。

White_pix_ind = []
row,col,depth = Img.shape
for i in range(row):
    for j in range(col):
        if( (Img[(i,j)][:]==White_pix_ind ).all() ):
            print(i,j)
            White_pix_ind.append((i,j))
            break;

最新更新