我正在尝试使用python和scipy进行一些非常简单的分割。我在这里尝试做的是标记和图像(一个numpy ndarray),然后计算一些补丁的大小,删除其中最大的补丁,然后再次标记。
然而,最后ndimage.label( fin )
给了我一个错误
RunTimeError: data type not supported
知道可能导致错误的原因是什么?数组a和数组fin都是与int32相同的数据类型。此外,label函数应该将结构元素和输出默认为与未定义的相同类型。这真让我烦恼。
这是我正在运行的小测试代码:
import numpy as np
from scipy import ndimage
def main():
a = np.array([ [1, 1, 1, 0, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 1],
[1, 0, 0, 0, 1, 0] ])
labeled_array, numpatches = ndimage.label(a)
sizes = ndimage.sum(a,labeled_array,range(1,numpatches+1))
mp = np.where(sizes == sizes.max())[0]+1
max_index = np.zeros(numpatches + 1, np.uint8)
max_index[mp] = 1
max_feature = max_index[labeled_array]
fin = max_feature^a
lArr, npa = ndimage.label( fin )
return
main()
答案 0 :(得分:1)
从ali_m的评论中得到了这个想法。我想尝试强制将数组类型转换为np.int64
,这似乎解决了问题。不知道为什么默认情况下阵列首先是np.int32。
a = np.array([ [1, 1, 1, 0, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 0, 0, 0, 1, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 1],
[1, 0, 0, 0, 1, 0] ], np.int64)
无论如何将类型转换为np.int64似乎解决了这个问题。