无法在 numpy 数组图像上使用 SIFT
can't use SIFT on a numpy array image
我打开脑 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]
所以现在 "data" 是一个 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(图片,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'
有人知道怎么解决吗?我似乎无法在网上找到任何帮助...
SIFT 期望数据类型为 uint8
。但是,如果值不在正确范围内(例如大于 255 或在 0-1 范围内),您将无法仅将数组转换为 uint8
。在转换之前,您可以缩放值,使值在 0-255 范围内。例如,以下将减去最小值,使最小值为零,然后缩放,使最大值为 255。然后您可以转换为类型 uint8
而不会损坏图像。
data = (data - np.min(data)) * 255 / np.max(data)
data = data.astype(np.uint8)
我打开脑 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]
所以现在 "data" 是一个 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(图片,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'
有人知道怎么解决吗?我似乎无法在网上找到任何帮助...
SIFT 期望数据类型为 uint8
。但是,如果值不在正确范围内(例如大于 255 或在 0-1 范围内),您将无法仅将数组转换为 uint8
。在转换之前,您可以缩放值,使值在 0-255 范围内。例如,以下将减去最小值,使最小值为零,然后缩放,使最大值为 255。然后您可以转换为类型 uint8
而不会损坏图像。
data = (data - np.min(data)) * 255 / np.max(data)
data = data.astype(np.uint8)