2010-10-11 46 views
6

我試圖將opencv的Threshold函數應用到一個numpy數組。我正在使用opencv 2.1的python綁定。它是這樣的:將opencv的閾值應用到一個numpy數組

import cv 
import numpy as np 
a = np.random.rand(1024,768) 
cv.Threshold(a,a,0.5,1,cv.CV_THRESH_BINARY) 

,這將引發一個錯誤:

OpenCV Error: Unsupported format or combination of formats() in threshold 

所以,我不相信,我知道我在做什麼,但我希望Threshold會工作等,用於例如,Smooth,其特徵在於,我可以運行

cv.Smooth(a,a) 

,沒有任何問題,且具有光滑的(ER)圖像結束。我不知道如何考慮numpy數組的「格式」,因爲opencv看到它們,但是我不願意將numpy數組轉換爲opencv圖像格式(並且我所有的嘗試都失敗了)無論如何)。

我想知道爲什麼Threshold不是以明顯天真的方式工作,我試圖使它工作,而且很高興知道我應該做些什麼。

P.S.我知道我可以對numpy數組執行閾值操作,但我試圖找出opencv。

回答

10

顯然Threshold方法比Smooth更挑剔 - 它只適用於8位整數/ 32位浮點數組(請參閱here),因此上面的代碼片段將不起作用,因爲numpy數組默認爲float64。

所以,如果你改變,你創建數組精度強制32位浮點行

>>> a = np.array(np.random.rand(1024,768),dtype=‘float32’) 

那麼它高興的門檻:

>>> ((a>0) & (a<1)).sum() 
786432 
>>> cv.Threshold(a,a,0.5,1,cv.CV_THRESH_BINARY) 
>>> ((a>0) & (a<1)).sum() 
0 
相關問題