diff --git a/modules/python/test/test.py b/modules/python/test/test.py index e0b674187f..d5fc533b78 100755 --- a/modules/python/test/test.py +++ b/modules/python/test/test.py @@ -27,6 +27,7 @@ from test_houghcircles import houghcircles_test from test_houghlines import houghlines_test from test_gaussian_mix import gaussian_mix_test from test_facedetect import facedetect_test +from test_kmeans import kmeans_test # Python 3 moved urlopen to urllib.requests try: diff --git a/modules/python/test/test_calibration.py b/modules/python/test/test_calibration.py index 6a1240c63d..4c275a0d23 100644 --- a/modules/python/test/test_calibration.py +++ b/modules/python/test/test_calibration.py @@ -23,7 +23,7 @@ class calibration_test(NewOpenCVTests): for i in range(1, 15): if i < 10: img_names.append('samples/data/left0{}.jpg'.format(str(i))) - else: + elif i != 10: img_names.append('samples/data/left{}.jpg'.format(str(i))) square_size = 1.0 diff --git a/modules/python/test/test_kmeans.py b/modules/python/test/test_kmeans.py new file mode 100644 index 0000000000..2420cce1a8 --- /dev/null +++ b/modules/python/test/test_kmeans.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python + +''' +K-means clusterization test +''' + +# Python 2/3 compatibility +from __future__ import print_function + +import numpy as np +import cv2 +from numpy import random + +from tests_common import NewOpenCVTests + + +def make_gaussians(cluster_n, img_size): + points = [] + ref_distrs = [] + sizes = [] + for i in xrange(cluster_n): + mean = (0.1 + 0.8*random.rand(2)) * img_size + a = (random.rand(2, 2)-0.5)*img_size*0.1 + cov = np.dot(a.T, a) + img_size*0.05*np.eye(2) + n = 100 + random.randint(900) + pts = random.multivariate_normal(mean, cov, n) + points.append( pts ) + ref_distrs.append( (mean, cov) ) + sizes.append(n) + points = np.float32( np.vstack(points) ) + return points, ref_distrs, sizes + +def getMainLabelConfidence(labels, nLabels): + + n = len(labels) + labelsDict = dict.fromkeys(range(nLabels), 0) + labelsConfDict = dict.fromkeys(range(nLabels)) + + for i in range(n): + labelsDict[labels[i][0]] += 1 + + for i in range(nLabels): + labelsConfDict[i] = float(labelsDict[i]) / n + + return max(labelsConfDict.values()) + +class kmeans_test(NewOpenCVTests): + + def test_kmeans(self): + + np.random.seed(10) + + cluster_n = 5 + img_size = 512 + + # generating bright palette + colors = np.zeros((1, cluster_n, 3), np.uint8) + colors[0,:] = 255 + colors[0,:,0] = np.arange(0, 180, 180.0/cluster_n) + colors = cv2.cvtColor(colors, cv2.COLOR_HSV2BGR)[0] + + points, _, clusterSizes = make_gaussians(cluster_n, img_size) + + term_crit = (cv2.TERM_CRITERIA_EPS, 30, 0.1) + ret, labels, centers = cv2.kmeans(points, cluster_n, None, term_crit, 10, 0) + + self.assertEqual(len(centers), cluster_n) + + offset = 0 + for i in range(cluster_n): + confidence = getMainLabelConfidence(labels[offset : (offset + clusterSizes[i])], cluster_n) + offset += clusterSizes[i] + self.assertGreater(confidence, 0.9) \ No newline at end of file diff --git a/modules/python/test/test_texture_flow.py b/modules/python/test/test_texture_flow.py index 50d1e692a0..7dc3b07040 100644 --- a/modules/python/test/test_texture_flow.py +++ b/modules/python/test/test_texture_flow.py @@ -36,7 +36,7 @@ class texture_flow_test(NewOpenCVTests): points = np.dstack( np.mgrid[d/2:w:d, d/2:h:d] ).reshape(-1, 2) textureVectors = [] - + for x, y in np.int32(points): textureVectors.append(np.int32(flow[y, x]*d))