2016-02-08 152 views
0
import cv2 
import numpy as np 
####### training part ############### 
samples = np.loadtxt('generalsamples.data',np.float32) 
responses = np.loadtxt('generalresponses.data',np.float32) 
responses = responses.reshape((responses.size,1)) 
model = cv2.KNearest() 
model.train(samples,responses) 
############################# testing part ######################### 
im = cv2.imread('/home/manoj/Pictures/Untitled-1.jpg') 
out = np.zeros(im.shape,np.uint8) 
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2) 
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
for cnt in contours: 
    if cv2.contourArea(cnt)>50: 
     [x,y,w,h] = cv2.boundingRect(cnt) 
     if h>28: 
      cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2) 
      roi = thresh[y:y+h,x:x+w] 
      roismall = cv2.resize(roi,(10,10)) 
      roismall = roismall.reshape((1,100)) 
      roismall = np.float32(roismall) 
      retval, results, neigh_resp, dists = model.find_nearest(roismall, k = 1) 
      string = str(int((results[0][0]))) 
      cv2.putText(out,string,(x,y+h),0,1,(0,255,0)) 
cv2.imshow('im',im) 
cv2.imshow('out',out) 
cv2.waitKey(0) 

OpenCV的Python的錯誤我用這個Python代碼與Opencv字符識別,但運行代碼時我得到這個錯誤。在簡單的數字識別

AttributeError: 'module' object has no attribute 'KNearest'

回答

2

由於新的OpenCV的版本則需要更換

model = cv2.KNearest() 

由:

model = cv2.ml.KNearest_create() 

此外,該行:

model.train(samples,responses) 

也將引發錯誤,這應該解決它:

model.train(samples,cv2.ml.ROW_SAMPLE,responses) # Might be adapted 

希望這會有所幫助。