OpenCV Enlaces de Python para el algoritmo GrabCut

He estado tratando de usar la implementación de OpenCV del método de corte a través de los enlaces de Python. He intentado usar la versión tanto en cv como en cv2, pero tengo problemas para encontrar los parámetros correctos para que el método se ejecute correctamente. He intentado varias permutaciones de los parámetros y nada parece funcionar (básicamente todos los ejemplos que he visto en Github). Aquí hay un par de ejemplos que he tratado de seguir:

Ejemplo

Ejemplo 2

Y aquí está la documentación del método y un informe de error conocido:

Documentació

Bug Grabcut conocido

Puedo ejecutar el código usando el ejemplo a continuación, pero devuelve una máscara de imagen en blanco (toda negra).

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)

Estoy usando SimpleCV para cargar las imágenes. El tipo de máscara y el tipo de retorno de img.getBitmap () son:

iplimage(nChannels=1 width=730 height=530 widthStep=732 )
iplimage(nChannels=3 width=730 height=530 widthStep=2192 )

Si alguien tiene un ejemplo funcional de este código, me encantaría verlo. Por lo que vale, estoy ejecutando OSX Snow Leopard, y mi versión de OpenCV se instaló desde el repositorio SVN (hace unas semanas). Como referencia, mi imagen de entrada es esta:

He intentado cambiar los valores de enumeración de la máscara de resultados a algo más visible. El problema no son los valores devueltos. Esto devuelve una imagen completamente negra. Probaré un par de valores más.

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")

Respuestas a la pregunta(4)

Su respuesta a la pregunta