2016-06-22 8 views
1
def adaptive_gaussian_thresholding(self, filename): 
    im = cv2.imread(filename, 0) 
    filtered_image = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 3, cv2.THRESH_BINARY, 3, 0) 
    cv2.imwrite(filename, filtered_image) 
filtered_image = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 3, cv2.THRESH_BINARY, 3, 0) 
error: /root/opencv/modules/imgproc/src/thresh.cpp:1287: error: (-215) blockSize % 2 == 1 && blockSize > 1 in function adaptiveThreshold 

ブロックサイズまたはタイルのサイズは、プロシージャに渡されるカーネルに使用する画素^ 2の数です。それは奇数である必要があります。これがバグか他の何かが間違っているかどうかわかりません。あなたはpythonでその関数のhelp()を呼び出して行う場合、呼び出しは次の形式を尊重する必要がOpenCVのパイソン誤っブロックサイズ

Official documentation

答えて

4

あなたは余分な引数でadaptiveThresholdを呼び出しています。 3adaptiveMethodthresholdType引数の間に間違って配置しました。あなたの呼び出しでは、の値に期待される位置にcv2.THRESH_BINARYフラグがあります。ちなみに、cv2.THRESH_BINARYはゼロと評価されるため、表示されるエラーです。あなたの関数を呼び出すための正しい方法は次のとおりです。私は私を混乱どう思い

filtered_image = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 0) 
+0

おかげで、あなたはファイルのための「DST」または目的地srcを欠けているように見えました。入力は指定しましたが、出力は指定していません。 – user5275692

+0

@ user5275692 Pythonバインディングでは、アルゴリズムの出力はほとんどの場合関数から返されるため、 'filtered_image'が出力になります。 'dst'パラメータは純粋にオプションであり、C++ APIからのホールドオーバーです。 – Aurelius

1

Help on built-in function adaptiveThreshold in module cv2: 

adaptiveThreshold(...) 
    adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) 

お電話でのadaptiveMethodthresholdType間の値3をする必要があります省略された。

そしてCを平均値または重み付け平均値から差し引くと、値e.g. 2を挿入することができます。

例コール: mycall= cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ cv2.THRESH_BINARY, 11, 2)