Tôi đã cố gắng sử dụng triển khai OpenCV của phương thức cắt lấy thông qua các ràng buộc Python. Tôi đã cố gắng sử dụng phiên bản trong cả cv và cv2 nhưng tôi gặp khó khăn trong việc tìm ra các thông số chính xác để sử dụng để có được phương pháp để chạy một cách chính xác. Tôi đã thử một số hoán vị của các tham số và không có gì dường như làm việc (về cơ bản tất cả các ví dụ tôi đã nhìn thấy trên Github). Dưới đây là một vài ví dụ tôi đã cố gắng làm theo:Bindings OpenCV Python cho thuật toán GrabCut
Và đây là tài liệu của phương pháp và một báo cáo lỗi được biết:
Tôi có thể lấy mã để thực hiện chúng tôi ing ví dụ bên dưới, nhưng nó trả về một mặt nạ hình ảnh trống (tất cả màu đen).
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)
Tôi đang sử dụng SimpleCV để tải hình ảnh. Loại mặt nạ và loại trả về từ img.getBitmap() là:
iplimage(nChannels=1 width=730 height=530 widthStep=732)
iplimage(nChannels=3 width=730 height=530 widthStep=2192)
Nếu ai đó có ví dụ làm việc của mã này, tôi rất muốn xem nó. Đối với những gì nó là giá trị tôi đang chạy trên OSX Snow Leopard, và phiên bản OpenCV của tôi đã được cài đặt từ kho SVN (như của một vài tuần trước). Để tham khảo hình ảnh đầu vào của tôi là:
Tôi đã thử thay đổi giá trị mặt nạ kết quả enum thành một cái gì đó dễ thấy hơn. Nó không phải là giá trị trả về là vấn đề. Điều này trả về một hình ảnh hoàn toàn màu đen. Tôi sẽ thử thêm một vài giá trị nữa.
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")
Ví dụ đã chuyển đến chuỗi chính. – kscottz