2016-09-20 1 views
1

Ich lese ein Tutorial zum Training KNN mit Opencv. Der Code ist für OpenCV 3 geschrieben, aber ich brauche, es zu benutzen in OpenCV 2. Die ursprüngliche Ausbildung ist:Konvertieren KNN Zug von Opencv 3 zu 2

cv2.ml.KNearest_create().train(npaFlattenedImages, cv2.ml.ROW_SAMPLE, npaClassifications) 

Ich habe versucht, mit diesem:

cv2.KNearest().train(npaFlattenedImages, cv2.CV_ROW_SAMPLE, npaClassifications) 

aber der Fehler ist:

Unsupported index array data type (it should be 8uC1, 8sC1 or 32sC1) in function cvPreprocessIndexArray

Der vollständige Code ist hier: https://github.com/MicrocontrollersAndMore/OpenCV_3_KNN_Character_Recognition_Python/blob/master/TrainAndTest.py

+0

Mit dem Befehl, den Sie vorschlagen, ich habe 'Attribute:‚Modul‘Objekt hat kein Attribut‚KNearest'' – xiawi

+0

Bitte geben Sie die relevanten stacktrace geben, auch nicht nur die Fehlermeldung. –

+0

Verwenden Sie Python und Opencv 2? Ich bekomme den gleichen Fehler. Schauen Sie sich diesen Link für die Dokumentation an: http://docs.opencv.org/2.4/modules/ml/doc/k_nearest_neighbors.html – Rueen1963

Antwort

0

Hier werden die Änderungen, die für OpenCV zu haben scheinen 2.4.13 die full code Arbeit für mich gemacht:

60c60 
<  kNearest = cv2.ml.KNearest_create()     # instantiate KNN object 
--- 
>  kNearest = cv2.KNearest()     # instantiate KNN object 
62c62 
<  kNearest.train(npaFlattenedImages, cv2.ml.ROW_SAMPLE, npaClassifications) 
--- 
>  kNearest.train(npaFlattenedImages, npaClassifications) 
85c85 
<  imgContours, npaContours, npaHierarchy = cv2.findContours(imgThreshCopy,    # input image, make sure to use a copy since the function will modify this image in the course of finding contours 
--- 
>  npaContours, npaHierarchy = cv2.findContours(imgThreshCopy,    # input image, make sure to use a copy since the function will modify this image in the course of finding contours 
125c125 
<   retval, npaResults, neigh_resp, dists = kNearest.findNearest(npaROIResized, k = 1)  # call KNN function find_nearest 
--- 
>   retval, npaResults, neigh_resp, dists = kNearest.find_nearest(npaROIResized, k = 1)  # call KNN function find_nearest 
0
  • Im Gegensatz zu dem allgemeinen CvStatModel::train(), cv2.KNearest.train() nicht das zweite optionale Argument hat int tflag, und die docs sagen : "Nur CV_ROW_SAMPLE Datenlayout wird unterstützt".
    • Die Fehlermeldung (btw die kryptischen Mnemotechnik sind OpenCV data types) wurde somit durch die Funktion verursacht versuchen npaClassifications als das nächste Argument zu verwenden, sampleIdx.

Weitere Fehler nach dieser Fixierung:

Und das Ergebnis jetzt:

result

Ulrich Stern already did me a favor to provide a raw diff.