私は、grab cutメソッドのOpenCV実装をPythonバインディングを介して使用しようとしています。私はcvとcv2の両方でバージョンを使用しようとしましたが、正しく実行するためのメソッドを取得するために使用する正しいパラメータを見つけることができません。私はパラメータのいくつかの順列を試してみましたが、何も動作していないようです(基本的にGithubで見たすべての例)。ここで私は従うことをしようとしたカップルの例です:OpenCV Pythonバインディングfor GrabCutアルゴリズム
そしてここでは、メソッドのドキュメントと既知のバグレポートです:
私は私たちを実行するコードを取得できます下の例では、空白の(すべて黒の)イメージマスクを返します。
img = Image("pills.png")
mask = img.getEmpty(1)
bgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
fgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
for i in range(0, 13*5):
cv.SetReal2D(fgModel, 0, i, 0)
cv.SetReal2D(bgModel, 0, i, 0)
rect = (150,70,170,220)
tmp1 = np.zeros((1, 13 * 5))
tmp2 = np.zeros((1, 13 * 5))
cv.GrabCut(img.getBitmap(),mask,rect,tmp1,tmp2,5,cv.GC_INIT_WITH_RECT)
私はSimpleCVを使用してイメージをロードしています。マスクタイプとimg.getBitmap(からの戻り値の型)は、次のとおりです。
iplimage(nChannels=1 width=730 height=530 widthStep=732)
iplimage(nChannels=3 width=730 height=530 widthStep=2192)
誰かが、私はそれを見るのが大好きだ、このコードの作業例を持っている場合。私はOSX Snow Leopardを実行しており、OpenCVのバージョンはSVNリポジトリからインストールされています(数週間前)。参考のため、私の入力画像は次のとおりです:
私は結果マスクの列挙値をより目立つものに変更しようとしました。それは問題の戻り値ではありません。これにより、完全に黒い画像が返されます。私はさらにいくつかの価値観を試してみましょう。
img = Image("pills.png")
mask = img.getEmpty(1)
bgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
fgModel = cv.CreateMat(1, 13*5, cv.CV_64FC1)
for i in range(0, 13*5):
cv.SetReal2D(fgModel, 0, i, 0)
cv.SetReal2D(bgModel, 0, i, 0)
rect = (150,70,170,220)
tmp1 = np.zeros((1, 13 * 5))
tmp2 = np.zeros((1, 13 * 5))
cv.GrabCut(img.getBitmap(), mask, rect, tmp1, tmp2, 5, cv.GC_INIT_WITH_MASK)
mask[mask == cv.GC_BGD] = 0
mask[mask == cv.GC_PR_BGD] = 0
mask[mask == cv.GC_FGD] = 255
mask[mask == cv.GC_PR_FGD] = 255
result = Image(mask)
result.show()
result.save("result.png")
例をメインスレッドに移動しました。 – kscottz