无法在 numpy 数组映像上使用 SIFT。



我打开一个脑部MRI扫描:

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

所以现在"data"是一个numpy数组(其中的元素是"numpy.foat64"(:

print(pic.shape)
print(type(pic))
print(type(pic[50,50]))
(154, 187)
<class 'numpy.ndarray'>
<class 'numpy.float64'>

好吧,现在我尝试使用SIFT:kp,des=sift.dedetectAndCompute(pic,无(

我得到这个错误:

OpenCV(3.4.2) C:projectsopencv- 
pythonopencv_contribmodulesxfeatures2dsrcsift.cpp:1121: error: (-5:Bad 
argument) image is empty or has incorrect depth (!=CV_8U) in function 
'cv::xfeatures2d::SIFT_Impl::detectAndCompute'

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

SIFT期望数据类型为uint8。但是,如果值不在正确的范围内(例如大于255或在0-1范围内(,则不能仅将数组转换为uint8。在转换之前,可以缩放值,使值在0-255之间。例如,下面将减去最小值,使最小值为零,然后缩放,使最大值为255。然后,您可以在不损坏图像的情况下转换为类型uint8

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

最新更新