我需要第二眼看到我的代码,它会获得圆形颜色的中心。由于一些无法解释的原因,它对于每个中心都返回相同的值,这远远不正确。圈子的结果:
中心颜色: [126 126 126] 点 x:502 y:440
中心色 [124 124 124] 点 x:502 y:516
中心色 [133 133 133] 点 x:502 y:596
中心色 [116 116 116] 点 x:504 y:306
中心色 [119 119 119] 点 x:504 y:366
输入图像如下所示。显然应该有非常不同的值,因为黑圈应该具有远低于100范围的平均RBG。
下图显示代码正确找到圆圈和圆心(标记为绿色),但是找不到正确的中心颜色值
以下代码:
import cv2
import numpy as np
from math import sqrt
# Open
img = cv2.imread('test1.jpg',0)
# Process
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
# Find Interest
circles = cv2.HoughCircles(img,cv2.cv.CV_HOUGH_GRADIENT,1,20,
param1=50,param2=30,minRadius=1,maxRadius=20)
circles = np.uint16(np.around(circles))
# Post Process
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 Colour"
print cimg[i[0], i[1]]
print "Point"
print "x: "+str(i[0]) + " y: " + str(i[1])
cv2.imwrite('output.png',cimg)
答案 0 :(得分:2)
根据我的理解,您应该获得内圈的颜色,因为您在访问颜色值之前绘制它。但由于返回的值不是0,0,255,因此必须交换坐标。
orig print是:
print "Center Colour (orig)", cimg[i[0], i[1]]
交换打印是:
print "Center Colour (swapped)", cimg[i[1], i[0]]
绘图后的输出:
Center Colour (orig) [126 126 126]
Center Colour (orig) [116 116 116]
...
Center Colour (swapped) [ 0 0 255]
Center Colour (swapped) [ 0 0 255]
...
如果现在在绘制内圆之前使用交换的打印,输出将如下所示:
Center Colour (swapped) [128 128 128]
Center Colour (swapped) [27 27 27]
...
这就是你要找的东西吗?