我使用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
所以我的问题是:
答案 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;