2016-03-15 3 views
0

Я хотел бы использовать ORB (http://docs.opencv.org/3.1.0/d1/d89/tutorial_py_orb.html#gsc.tab=0) на 28 * 28 черно-белое изображение (рукописные цифры), где каждый пиксель имеет номер от 0 до 255.Как использовать orb на изображении в CV2?

Это код, который я использовал:

# image = {load the array of 754 numbers} 
orb = cv2.ORB_create() 
image = image.reshape(28, 28)) 
kp = orb.detect(image, None) 

Но я получаю эту ошибку:

OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in cvtColor, file /home/yahya/Documents/_other_downloaded_apps/opencv/modules/imgproc/src/color.cpp, line 7935 
Traceback (most recent call last): 
    File "/home/yahya/Documents/hello.py", line 118, in <module> 
    kp = orb.detect(image, None) 
cv2.error: /home/yahya/Documents/_other_downloaded_apps/opencv/modules/imgproc/src/color.cpp:7935: error: (-215) depth == CV_8U || depth == CV_16U || depth == CV_32F in function cvtColor 

Как я могу это сделать, и почему я получаю эту ошибку?

UPDATE

я, казалось, решила часть этой проблемы. Оказывается, что шар принимает числа float32 (не 64).

Поэтому я обновил свой код следующим образом:

orb = cv2.ORB_create() 
image = feature_x[0].reshape(28, 28).astype('float32') 
kp = orb.detect(image, None) 

Но теперь у меня есть следующее сообщение об ошибке:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/yahya/Documents/_other_downloaded_apps/opencv/modules/imgproc/src/color.cpp, line 7456 
Traceback (most recent call last): 
    File "/home/yahya/Documents/hello.py", line 188, in <module> 
    kp = orb.detect(image, None) 
cv2.error: /home/yahya/Documents/_other_downloaded_apps/opencv/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor 
+0

Как вы создаете изображение? – Thesane

+0

Это изображение из набора данных mnist: http://yann.lecun.com/exdb/mnist/index.html. Я не создал его сам. Это просто массив из 784 (28 * 28) чисел между 0-255. Поэтому, когда я изменяю его, он создает матрицу 28 * 28. –

+0

Я добавил пример изображения из своего набора данных –

ответ

2

Изображение, которое вы пытаетесь загрузить, не совместимый тип для шара. Прежде чем использовать его, вы должны преобразовать его. Также вам не нужно reshape, если вы загружаете его в массив numpy

orb = cv2.ORB_create() 
image = image.astype(np.uint8, copy=False) 
kp = orb.detect(image, None) 
+0

Мне нужно изменить форму, иначе он не будет знать его 28 * 28 изображений , Также rasies ошибка. Также спасибо за помощь! –