Python scikit图像转换值错误:缓冲区不连续
我正在使用skimage transform模块的Python scikit图像转换值错误:缓冲区不连续,python,numpy,buffer,scikit-image,Python,Numpy,Buffer,Scikit Image,我正在使用skimage transform模块的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 如何修复此问题?重塑(和其他操作)有时会破坏阵列的连续性。您可以通过查看标志来检
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
如何修复此问题?重塑(和其他操作)有时会破坏阵列的连续性。您可以通过查看标志来检查是否发生了这种情况:
>>> 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连续副本:
函数返回一个与目标数组形状和值相同的数组,但返回的数组存储为C连续数组。我发现一个错误可能引发此异常。确保您的区域位于图像中。例如,假设图像是300x200,区域是[199:299100:199]。注299>200。如果执行调整大小(图像[100:199,199:299]),您将看到此错误
希望它能对您有所帮助。也许您可以提供一个显示此行为的自包含片段吗?这是不应该发生的,如果发生了,我想修复一个bug。调整非连续阵列的大小在我的系统上有效。您建议我在哪里添加ascontiguousarray部分?我是这样尝试的:candidate=resize(np.ascontiguousarray(img[candidate\u-box[0]:candidate\u-box[2]、candidate\u-box[1]:candidate\u-box[3]],(50100))
@user961627是的,如果resize
要求数组是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