2015-02-13 2 views
3

Я использую OpenCV 2.4.8 и Python 2.7.5 в Ubuntu 14.04Knearest() Функция не работает в OpenCV 2.4.8 и Python 2.7.5

Когда я называю

knn=cv2.KNearest() 

Я получаю ошибка говоря

knn=cv2.KNearest() AttributeError: 'module' object has no attribute 'KNearest'

Как я могу решить это? Полный код здесь

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) 
####################### тестирования часть
im = cv2.imread('training_images/number1.jpg') 
out = np.zeros(im.shape,np.uint8) 
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2) 

image,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) & 0 x FF 
+0

Вы уверены, что это opencv2.4.8? попробуйте 'cv2 .__ version__' – berak

+0

Да, я проверил его с помощью cv2 .__ version__ –

+0

Я отправил код в конце –

ответ

1

Я решил эту проблему. Проблема была в версии opencv. Вот почему он не признавал функцию KNN. Я установил opencv 2.4.10, и он отлично работает. Спасибо вам всем.

1

Это правильный способ вызова KNearest() , поэтому вы делаете что-то еще неправильно.

Вот полный рабочий пример использования k-Nearest Neighbors, взятых из [здесь].

import cv2 
import numpy as np 
import matplotlib.pyplot as plt 

# Feature set containing (x,y) values of 25 known/training data 
trainData = np.random.randint(0,100,(25,2)).astype(np.float32) 

# Labels each one either Red or Blue with numbers 0 and 1 
responses = np.random.randint(0,2,(25,1)).astype(np.float32) 

# Take Red families and plot them 
red = trainData[responses.ravel()==0] 
plt.scatter(red[:,0],red[:,1],80,'r','^') 

# Take Blue families and plot them 
blue = trainData[responses.ravel()==1] 
plt.scatter(blue[:,0],blue[:,1],80,'b','s') 

plt.show() 

newcomer = np.random.randint(0,100,(1,2)).astype(np.float32) 
plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o') 

knn = cv2.KNearest() 
knn.train(trainData,responses) 
ret, results, neighbours ,dist = knn.find_nearest(newcomer, 3) 

print "result: ", results,"\n" 
print "neighbours: ", neighbours,"\n" 
print "distance: ", dist 

plt.show() 

Если это не сработает, у вас возникнут большие проблемы.

+0

Я пробовал все. Я думаю, что у меня нет обновленных функций python. cv2 не показывает функции KNearest() или SVM() в своем списке функций. И спасибо за ваш ответ. –

Смежные вопросы