2015-11-10 7 views
7

używam OpenCV 3.0.0 i Python 2.7.5_x32OpenCV wykrywanie błędów funkcja 3 pyton na funkcji cv2.detectAndCompute a także na cv2.compute

To jest mój kod (ORB_feature_detection):

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

img1 = cv2.imread('C:\\Python27\\madar1.jpg',0)   # queryImage 
img2 = cv2.imread('C:\\Python27\\madar2.jpg',0) # trainImage 

# Initiate SIFT detector 
orb = cv2.ORB_create() 

# line 12 
# find the keypoints and descriptors with SIFT 
kp1, des1 = orb.detectAndCompute(img1,None) 
kp2, des2 = orb.detectAndCompute(img2,None) 

# create BFMatcher object 

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) 

# Match descriptors. 
matches = bf.match(des1,des2) 

# Sort them in the order of their distance. 
matches = sorted(matches, key = lambda x:x.distance) 

# Draw first 10 matches. 
img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:10], flags=2) 

plt.imshow(img3),plt.show() 

cv2.waitKey() 
cv2.destroyAllWindows() 

i jest to komunikat o błędzie, komunikat o błędzie znajduje się na części kp1, des1 = orb.detectAndCompute (img1, Brak), pracowałem na opencv 2.4.11 i nie działa na opencv 3.0.0!

Traceback (most recent call last): 
    File "C:\Python27\orb_matcher.py", line 12, in <module> 
    kp1, des1 = orb.detectAndCompute(img1,None) 
error: ..\..\..\modules\python\src2\cv2.cpp:163: error: (-215) The data should normally be NULL! in function NumpyAllocator::allocate 

Proszę mi pomóc, co powinienem zrobić, żeby to zadziałało?

+0

Ten sam problem nadal występuje na Opencv 3.1, Pythonie 2.7 x64 z systemem Windows, działał dobrze na Opencv 2.4. W związku z tym przyjęte rozwiązanie sugerowane [tutaj] (http://stackoverflow.com/a/33099160/2559632) nie działa, przynajmniej nie w systemie Windows – shadowrunner

+0

Odkomentowanie asercji i rekompilacja zgodnie z sugestią [tutaj] (http: // /stackoverflow.com/a/33877947/2559632) wykonuje zadanie; więc kto spisze problem? : D – shadowrunner

+0

Pomoże nam dołączyć oryginalne obrazy, abyśmy mogli odtworzyć, czy problem nadal istnieje. – tfv

Odpowiedz

5

Możesz spróbować dodać ten skrypt po zaimportowaniu cv2 i innych cv2.ocl.setUseOpenCL(False) rozwiązało to mój problem.

+0

Dziękuję za tę odpowiedź. Czy wiesz, dlaczego ta linia jest konieczna? – Nick

+2

Ponieważ istnieje "kilka problematycznych interakcji między powiązaniami Pythona i OpenCL" zobacz więcej tutaj: https://github.com/opencv/opencv/issues/6081 – lmiguelmh

Powiązane problemy