我正在尝试检测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()
这是图片: Image
答案 0 :(得分:0)
在这里,您需要知道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()