Ошибка при попытке определить цвет в центре круга - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь определить цвет в центре обнаруженного круга от HoughCircles.Я делаю это следующим образом:

print("Center of the circle: ", i[0]," ", i[1])
print(ci[i[0]][i[1]][0]," blue")
print(ci[i[0]][i[1]][1]," green")
print(ci[i[0]][i[1]][2]," red")

Здесь ci - это массив изображений opencv, а i[0] и i[1] представляют координаты центра круга, заданные HoughCircles вприведенный ниже код.

Но когда я это делаю, я получаю сообщение об ошибке:

IndexError: index 1034 is out of bounds for axis 0 with size 600

Я не мог понять причину этого.Я пытаюсь определить цвет в центре круга.

    import cv2
    import numpy as np
    import sys
    import math


    img = cv2.imread("images/diffc.jpeg", 0)
    ci = cv2.imread("images/diffc.jpeg")

    cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)



    minDist = 150
    param1 = 120
    param2 = 37

    minRadius = 120
    maxRadius = 140


    circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
                                param1=param1,param2=param2,minRadius=minRadius,maxRadius=maxRadius)


    if circles is None:
            print("No circles detected!")
            sys.exit(-1)


    circles = np.uint16(np.around(circles))

    for i in circles[0,:]:

        # draw the outer circle
        cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
        # draw the center of the circle
        cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
        print("Center of the circle: ", i[0]," ", i[1])
        # STATEMENTS THAT THROW ERROR
        print(ci[i[0]][i[1]][0]," blue")
        print(ci[i[0]][i[1]][1]," green")
        print(ci[i[0]][i[1]][2]," red")

    cv2.imshow('detected circles',cimg)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Вот изображение: Изображение

1 Ответ

0 голосов
/ 27 января 2019

Здесь Вам необходимо знать, что метод HoughCircles возвращает центр круга в виде width x height и numpy находит изображение с rows x columns.

Итак, вам нужно сначала пройти columns, а затем rows в ci.

Итак, чтобы обнаружить синий цвет: ci[i[1]][i[0]][0].

Ваш финалкод:

import cv2
import numpy as np
import sys
import math


img = cv2.imread("images/diffc.jpeg", 0)
ci = cv2.imread("images/diffc.jpeg")

cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)



minDist = 150
param1 = 120
param2 = 37

minRadius = 120
maxRadius = 140


circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,minDist,
                          param1=param1,param2=param2,minRadius=minRadius,maxRadius=maxRadius)


if circles is None:
      print("No circles detected!")
      sys.exit(-1)


circles = np.uint16(np.around(circles))

for i in circles[0,:]:

  # draw the outer circle
  cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
  # draw the center of the circle
  cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
  print("Center of the circle: ", i[0]," ", i[1])
  # STATEMENTS THAT THROW ERROR
  print(ci[i[1]][i[0]][0]," blue")
  print(ci[i[1]][i[0]][1]," green")
  print(ci[i[1]][i[0]][2]," red")

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
...