2016-12-08 4 views
0

Я получаю центроиды объектов в изображении, как это:открытого резюме, IMG [х, у] всегда возвращался 0

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

    _, contours, _ = cv2.findContours(gray.copy(), cv2.RETR_CCOMP, cv2.CHAIN_APPROX_TC89_L1) 

    centres = [] 
    for i in range(len(contours)): 
     moments = cv2.moments(contours[i]) 
     centres.append((int(moments['m10']/moments['m00']), int(moments['m01']/moments['m00']))) 

Я зацикливание над центрами и пытаюсь получить цвет каждого центр пикселя. По какой-то причине каждый возвращение 0,0,0

for c in centres: 
    print img[c] 

Я также получаю эту ошибку

IndexError: index 484 is out of bounds for axis 0 with size 480 

ответ

1

изображения в OpenCV Numpy структура представляет собой 3D-матрица. Чтобы иметь интенсивность в пикселе координаты х, у (напомнят, что у являются строками), вы должны сделать это (в черно-белом изображении)

intensity = img[y,x] 

И когда я прочитал вашу ошибку линию я думаю, это ваше уникальная ошибка.

Чтобы иметь цвета (в BGR), вы должны написать что-то вроде

blue = img[y,x,0] 
green = img[y,x,1] 
red = img[y,x,2] 

Вы должны проверить, если это ваша ситуация с использованием

print c 

и посмотрим, какие координаты центра. Если вы получаете что-то lixe

с (х, у) = 484, 300

в 640 х 480 изображений, он уверен, что вы должны использовать img[y,x] потому, что координаты дают й первую, но матрицы сначала захотите строки.

value = img[row,column] 

 Смежные вопросы

  • Нет связанных вопросов^_^