Path: blob/master/modules/python/test/test_houghcircles.py
16337 views
#!/usr/bin/python12'''3This example illustrates how to use cv.HoughCircles() function.4'''56# Python 2/3 compatibility7from __future__ import print_function89import cv2 as cv10import numpy as np11import sys12from numpy import pi, sin, cos1314from tests_common import NewOpenCVTests1516def circleApproximation(circle):1718nPoints = 3019dPhi = 2*pi / nPoints20contour = []21for i in range(nPoints):22contour.append(([circle[0] + circle[2]*cos(i*dPhi),23circle[1] + circle[2]*sin(i*dPhi)]))2425return np.array(contour).astype(int)2627def convContoursIntersectiponRate(c1, c2):2829s1 = cv.contourArea(c1)30s2 = cv.contourArea(c2)3132s, _ = cv.intersectConvexConvex(c1, c2)3334return 2*s/(s1+s2)3536class houghcircles_test(NewOpenCVTests):3738def test_houghcircles(self):3940fn = "samples/data/board.jpg"4142src = self.get_sample(fn, 1)43img = cv.cvtColor(src, cv.COLOR_BGR2GRAY)44img = cv.medianBlur(img, 5)4546circles = cv.HoughCircles(img, cv.HOUGH_GRADIENT, 1, 10, np.array([]), 100, 30, 1, 30)[0]4748testCircles = [[38, 181, 17.6],49[99.7, 166, 13.12],50[142.7, 160, 13.52],51[223.6, 110, 8.62],52[79.1, 206.7, 8.62],53[47.5, 351.6, 11.64],54[189.5, 354.4, 11.64],55[189.8, 298.9, 10.64],56[189.5, 252.4, 14.62],57[252.5, 393.4, 15.62],58[602.9, 467.5, 11.42],59[222, 210.4, 9.12],60[263.1, 216.7, 9.12],61[359.8, 222.6, 9.12],62[518.9, 120.9, 9.12],63[413.8, 113.4, 9.12],64[489, 127.2, 9.12],65[448.4, 121.3, 9.12],66[384.6, 128.9, 8.62]]6768matches_counter = 06970for i in range(len(testCircles)):71for j in range(len(circles)):7273tstCircle = circleApproximation(testCircles[i])74circle = circleApproximation(circles[j])75if convContoursIntersectiponRate(tstCircle, circle) > 0.6:76matches_counter += 17778self.assertGreater(float(matches_counter) / len(testCircles), .5)79self.assertLess(float(len(circles) - matches_counter) / len(circles), .75)808182if __name__ == '__main__':83NewOpenCVTests.bootstrap()848586