scikit-image transform ValueError:缓冲区不是C连续的

时间:2014-11-05 12:03:37

标签: python numpy buffer scikit-image

我使用了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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

重塑(和其他操作)有时会破坏数组的连续性。您可以通过查看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

尝试使用np.ascontiguousarray制作数组的C连续副本:

 >>> 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连续数组。

答案 1 :(得分:0)

我发现错误可能引发此异常。确保您的区域 在您的图片中。例如,假设您的图片为300x200,您的区域为[199:299,100:199]。注299> 200。如果执行调整大小(图像[100:199,199:299]),您将看到此错误。

希望它可以帮助你。