2014-11-05 82 views
0

我使用的是skimage變換模塊的resize方法。scikit-image transform ValueError:緩衝區不是C連續的

並不總是,但有時,我在這條線得到一個錯誤:

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

它告訴我:

ValueError: Buffer not C contiguous 

我該如何解決這個問題?

+0

也許重複的http://stackoverflow.com/questions/21811633/scipys-griddata-method-always-fails – coo 2014-11-05 12:09:00

+0

你能否提供一個自包含的片段,顯示這種行爲?這不應該發生,如果它發生了,那是我想修復的一個錯誤。調整非連續數組的大小適用於我的系統。 – 2014-11-05 14:08:30

回答

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 

嘗試使陣列的一個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連續數組。

+0

你在哪裏建議我添加ascontiguousarray部分?我試圖這樣:候選= resize(np.ascontiguousarray(img [candidate_box [0]:candidate_box [2],candidate_box [1]:candidate_box [3]]),(50,100))' – user961627 2014-11-05 12:37:49

+0

@ user961627是,如果'resize'需要數組是C連續的,那麼這似乎是一個使用它的好地方。 – 2014-11-05 12:45:58

0

我發現一個錯誤可能會引發此異常。確保您的區域是您的形象。例如,假設您的圖片爲300x200,而您的區域爲[199:299,100:199]。注299> 200。如果執行調整大小(圖像[100:199,199:299]),您將看到此錯誤。

希望它能幫助你。