преобразование scikit-image ValueError: буфер не является непрерывным C

Я использую метод resize модуля преобразования skimage.

Не всегда, но иногда я получаю сообщение об ошибке в этой строке:

candidate = resize(np.copy(img[candidate_box[0]:candidate_box[2],candidate_box[1]:candidate_box[3]]), (50,100))

Он говорит мне:

ValueError: Buffer not C contiguous

Как я могу это исправить?


person user961627    schedule 05.11.2014    source источник


Ответы (2)


Изменение формы (и другие операции) иногда нарушает непрерывность массива. Вы можете проверить, произошло ли это, посмотрев на 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.

person Alex Riley    schedule 05.11.2014
comment
Где вы предлагаете мне добавить часть ascontiguousarray? Пробую так: candidate = resize(np.ascontiguousarray(img[candidate_box[0]:candidate_box[2],candidate_box[1]:candidate_box[3]]), (50,100)) - person user961627; 05.11.2014
comment
@user961627 user961627 Да, если resize требует, чтобы массив был непрерывным C, это кажется хорошим местом для его использования. - person Alex Riley; 05.11.2014

Я обнаружил, что ошибка может вызвать это исключение. Убедитесь, что ваш регион находится внутри вашего изображения. Например, допустим, ваше изображение имеет размер 300x200, а ваш регион — [199:299, 100:199]. Примечание 299>200. Если вы выполните resize(image[100:199, 199:299]), вы увидите эту ошибку.

Надеюсь, это поможет вам.

person Tengerye    schedule 26.11.2017