Ошибка при применении OpenCV SURF к цветовому пространству HSV в python - PullRequest
0 голосов
/ 11 июня 2018

Я внедряю SURF в образ HSV, но он не работает.И когда я делаю то же самое с RGB-изображением, оно работает нормально.

from PIL import Image
import cv2
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

#loaading image
rgb_img_arr= np.array(Image.open("myImage.jpg"))
hsv_image_arr=matplotlib.colors.rgb_to_hsv(rgb_img_arr)

surf = cv2.xfeatures2d.SURF_create()

#it works fine
keypoints, descriptors = surf.detectAndCompute(rgb_img_arr, None)
rgb_img = cv2.drawKeypoints(rgb_img_arr, keypoints, None)
plt.imshow(rgb_img )

#But it doent work
keypoints, descriptors = surf.detectAndCompute(hsv_image_arr, None)
hsv_img = cv2.drawKeypoints(hsv_image_arr, keypoints, None)
plt.imshow(hsv_img )

Ошибка, которую я получаю -

C: \ projects \ opencv-python \ opencv_contrib \ modules\ xfeatures2d \ src \ surf.cpp: 892: ошибка: (-215)! _img.empty () && ((imgtype) & ((1 << 3) - 1)) == 0 && (imgcn == 1 || imgcn == 3 || imgcn == 4) в функции cv :: xfeatures2d :: SURF_Impl :: detectAndCompute </p>

Скажите, пожалуйста, как я могу это исправить?

1 Ответ

0 голосов
/ 11 июня 2018

detectAndCompute ожидает изображение CV_8U.(imgtype) & ((1 << 3) - 1)) == 0 немного загадочно, но если вы проследите за ошибкой до источника, вы увидите, что там: https://github.com/opencv/opencv_contrib/blob/2231018c839d728811a39556ec83741bf9a27614/modules/xfeatures2d/src/surf.cpp#L892

Преобразование HSV matplotlib.colors.rgb_to_hsv возвращает вместо этого плавающее изображение.

Либо вы конвертируете изображение с плавающей запятой обратно в неподписанное.Или вы можете напрямую использовать преобразование цветов OpenCV, которое по умолчанию вернет изображение размером 8U:

hsv_image_array = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
...