不能在numpy数组图像上使用SIFT

时间:2018-11-30 19:22:51

标签: python opencv sift

我打开了脑部MRI扫描:

path = os.path.join(r"C:\temp\generated_noisy\patients", 
lst_of_filenames[index_of_filename])
scan = nib.load(path)
data = scan.get_data()
data = data[14:168,18:205,98]

所以现在“数据”是一个numpy数组(其中的元素是“ numpy.float64”):

print(pic.shape)
print(type(pic))
print(type(pic[50,50]))

(154, 187)
<class 'numpy.ndarray'>
<class 'numpy.float64'>

好的,现在我尝试使用SIFT:     kp,des = sift.detectAndCompute(pic,None)

我得到这个错误:

OpenCV(3.4.2) C:\projects\opencv- 
python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1121: error: (-5:Bad 
argument) image is empty or has incorrect depth (!=CV_8U) in function 
'cv::xfeatures2d::SIFT_Impl::detectAndCompute'

有人知道如何解决这个问题吗?我似乎在网上找不到任何帮助...

1 个答案:

答案 0 :(得分:0)

SIFT期望数据类型为uint8。但是,如果值不在正确的范围内(例如,大于255或在0-1范围内),则无法将数组转换为uint8。转换之前,您可以缩放值,使值在0-255范围内。例如,以下代码将减去最小值,因此最小值为零,然后按比例缩放,因此最大值为255。然后您可以转换为类型uint8,而不会破坏图像。

data = (data - np.min(data)) * 255 / np.max(data)
data = data.astype(np.uint8)