我正在使用 skimage 转换模块的resize
方法。
并非总是如此,但有时,我在这一行遇到错误:
candidate = resize(np.copy(img[candidate_box[0]:candidate_box[2],candidate_box[1]:candidate_box[3]]), (50,100))
它告诉我:
ValueError: Buffer not C contiguous
我怎样才能解决这个问题?
我正在使用 skimage 转换模块的resize
方法。
并非总是如此,但有时,我在这一行遇到错误:
candidate = resize(np.copy(img[candidate_box[0]:candidate_box[2],candidate_box[1]:candidate_box[3]]), (50,100))
它告诉我:
ValueError: Buffer not C contiguous
我怎样才能解决这个问题?
重塑(和其他操作)有时会破坏数组的连续性。您可以通过查看以下内容来检查是否发生了这种情况flags
:
>>> a = np.arange(10).reshape(5, 2).T
>>> a.flags
C_CONTIGUOUS : False # reshaped array is no longer C contiguous
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
尝试使用以下命令制作数组的 C 连续副本np.ascontiguousarray
:
>>> b = np.ascontiguousarray(a)
>>> b.flags
C_CONTIGUOUS : True # array b is a C contiguous copy of array a
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
该函数返回一个与目标数组具有相同形状和值的数组,但返回的数组存储为 C 连续数组。
我发现一个错误可能会引发这个异常。确保您的区域在您的图像内。例如,假设您的图像是 300x200,您的区域是 [199:299, 100:199]。注释 299>200。如果你执行 resize(image[100:199, 199:299]),你会看到这个错误。
希望它可以帮助你。