我在檢測圓圈區域時遇到問題。 我用opencv的HoughCircles函數試了一下。然而,儘管圖像非常相似,但功能的參數必須不同才能檢測到圓圈。python opencv - blob檢測或圓圈檢測
我嘗試的另一種方法是迭代每個像素,並檢查當前像素是否是白色。 如果是這種情況,那麼檢查該區域是否有斑點物體(斑點中心距離小於閾值)。如果有,則將像素追加到blob,如果沒有,則創建一個新的blob。 這也沒有正常工作。
有沒有人有一個想法,我可以如何使這項工作(90%的檢測)? 我附上了一個示例圖像和另一個圖像,我標記了圓圈。 謝謝!
UPDATE: 謝謝你的幫助迄今爲止! 這是我獲得的輪廓和麪積過濾它們的代碼:
im = cv2.imread('extract_blue.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
im_gauss = cv2.GaussianBlur(imgray, (5, 5), 0)
ret, thresh = cv2.threshold(im_gauss, 127, 255, 0)
# get contours
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours_area = []
# calculate area and filter into new array
for con in contours:
area = cv2.contourArea(con)
if 1000 < area < 10000:
contours_area.append(con)
這是我通過圓過濾部分,它直接在下面,我通過區域過濾代碼:
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/perimeter*perimeter)
print circularity
if 0.8 < circularity < 1.2:
contours_cirles.append(con)
然而,新的名單「contours_cirles」是空的。我在環印有「圓」和值10之間的所有000和100 000
更新#2: 糾正現在運轉缺少括號後!
contours_cirles = []
# check if contour is of circular shape
for con in contours_area:
perimeter = cv2.arcLength(con, True)
area = cv2.contourArea(con)
if perimeter == 0:
break
circularity = 4*math.pi*(area/(perimeter*perimeter))
print circularity
if 0.7 < circularity < 1.2:
contours_cirles.append(con)
非常感謝你們! :)
非常老的代碼。但你可以檢查這個。 https://github.com/bipul21/Colored-Ball-Tracking –
'(面積/周長*周長)'這對我來說看起來很奇怪。你確定,你沒有忘記任何括號? – Moritz
是的,你是對的。 圓形度= 4 * math.pi *(面積/(周長*周長)) – cmplx96