我打开了脑部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'
有人知道如何解决这个问题吗?我似乎在网上找不到任何帮助...
答案 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)