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

时间:2016-06-05 06:13:04

标签: python image opencv image-processing

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

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

我希望找到白色像素的索引,其像素值为[255,255,255]。我知道我实际上是一个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

所以我的问题是:

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

2 个答案:

答案 0 :(得分:0)

如果要获取所有白色像素的索引,可以将图像转换为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阵列。你总是可以为实际的数组做这件事。我这样做是为了向你解释算法。

答案 1 :(得分:0)

你是对的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;