2014-04-11 7 views
6

Pracuję na swój sposób poprzez przykłady openCV i czasami przykłady nie będą działać. W wielu przypadkach po prostu muszę wprowadzić drobne zmiany i wtedy to działa. W tym przypadku nie znalazłem dotychczas rozwiązania. Jeśli uruchomię poniższy kod, otrzymam komunikat o błędzie na linii kmeans. Sprawdziłem typy danych i wygląda na to, że wszystko jest w porządku. Czy ktoś ma pojęcie, co dzieje się nie tak? Dzięki!Python openCV: przykładowy kmeans nie działa

przykład kod z https://github.com/Itseez/opencv:

''' 
Keyboard shortcuts: 
    ESC - exit 
    space - generate new distribution 
''' 

import numpy as np 
import cv2 
from gaussian_mix import make_gaussians 

if __name__ == '__main__': 
    cluster_n = 5 
    img_size = 512 

    print __doc__ 

    # 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] 

    while True: 
     print 'sampling distributions...' 
     points, _ = 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) 

     img = np.zeros((img_size, img_size, 3), np.uint8) 
     for (x, y), label in zip(np.int32(points), labels.ravel()): 
      c = map(int, colors[label]) 
      cv2.circle(img, (x, y), 1, c, -1) 

     cv2.imshow('gaussian mixture', img) 
     ch = 0xFF & cv2.waitKey(0) 
     if ch == 27: 
      break 
    cv2.destroyAllWindows() 

Komunikat o błędzie:

TypeError: an integer is required 

Odpowiedz

10

używałem przykład z wersji 3.x OpenCV gdy używam na jądrzach: 2.4.8. Składnia jest różna w 2.x:

ret, labels, centers = cv2.kmeans(points, cluster_n, term_crit, 10, 0)