"atomic bomb" commit. Reorganized OpenCV directory structure
This commit is contained in:
60
samples/python/kmeans.py
Executable file
60
samples/python/kmeans.py
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/python
|
||||
import urllib2
|
||||
import cv
|
||||
from random import randint
|
||||
MAX_CLUSTERS = 5
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
color_tab = [
|
||||
cv.CV_RGB(255, 0,0),
|
||||
cv.CV_RGB(0, 255, 0),
|
||||
cv.CV_RGB(100, 100, 255),
|
||||
cv.CV_RGB(255, 0,255),
|
||||
cv.CV_RGB(255, 255, 0)]
|
||||
img = cv.CreateImage((500, 500), 8, 3)
|
||||
rng = cv.RNG(-1)
|
||||
|
||||
cv.NamedWindow("clusters", 1)
|
||||
|
||||
while True:
|
||||
cluster_count = randint(2, MAX_CLUSTERS)
|
||||
sample_count = randint(1, 1000)
|
||||
points = cv.CreateMat(sample_count, 1, cv.CV_32FC2)
|
||||
clusters = cv.CreateMat(sample_count, 1, cv.CV_32SC1)
|
||||
|
||||
# generate random sample from multigaussian distribution
|
||||
for k in range(cluster_count):
|
||||
center = (cv.RandInt(rng)%img.width, cv.RandInt(rng)%img.height)
|
||||
first = k*sample_count/cluster_count
|
||||
last = sample_count
|
||||
if k != cluster_count:
|
||||
last = (k+1)*sample_count/cluster_count
|
||||
|
||||
point_chunk = cv.GetRows(points, first, last)
|
||||
|
||||
cv.RandArr(rng, point_chunk, cv.CV_RAND_NORMAL,
|
||||
cv.Scalar(center[0], center[1], 0, 0),
|
||||
cv.Scalar(img.width*0.1, img.height*0.1, 0, 0))
|
||||
|
||||
|
||||
# shuffle samples
|
||||
cv.RandShuffle(points, rng)
|
||||
|
||||
cv.KMeans2(points, cluster_count, clusters,
|
||||
(cv.CV_TERMCRIT_EPS + cv.CV_TERMCRIT_ITER, 10, 1.0))
|
||||
|
||||
cv.Zero(img)
|
||||
|
||||
for i in range(sample_count):
|
||||
cluster_idx = int(clusters[i, 0])
|
||||
pt = (cv.Round(points[i, 0][0]), cv.Round(points[i, 0][1]))
|
||||
cv.Circle(img, pt, 2, color_tab[cluster_idx], cv.CV_FILLED, cv.CV_AA, 0)
|
||||
|
||||
cv.ShowImage("clusters", img)
|
||||
|
||||
key = cv.WaitKey(0) % 0x100
|
||||
if key in [27, ord('q'), ord('Q')]:
|
||||
break
|
||||
|
||||
cv.DestroyWindow("clusters")
|
Reference in New Issue
Block a user