我正在将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 )
我得到的错误是-
请告诉我我该如何解决
?
最佳答案
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
会返回一个 float 图片。
您可以将 float 图像转换回无符号图像。或者,您可以直接使用OpenCV颜色转换,默认情况下将返回8U图像:
hsv_image_array = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
关于opencv - 在Python中将OpenCV SURF应用于HSV颜色空间时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50798248/