scikit-image transform 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 източник
comment
Може би дубликат на stackoverflow.com/questions/21811633/   -  person coo    schedule 05.11.2014
comment
Бихте ли предоставили самостоятелен фрагмент, който показва това поведение? Това не трябва да се случва и ако се случи, това е грешка, която бих искал да поправя. Преоразмеряването на несъседни масиви работи на моята система.   -  person Stefan van der Walt    schedule 05.11.2014


Отговори (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 Да, ако 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