OpenCV версия 4.1.0 drawContours - PullRequest
       20

OpenCV версия 4.1.0 drawContours

2 голосов
/ 25 апреля 2019

У меня есть следующий код, который хорошо работал с OpenCV 3.4.1 и теперь не работает с OpenCV 4.1.0 и выдает ошибку.Я не знаю, как адаптировать код с более новой версией, вы можете мне помочь с этим?Большое спасибо

def ImageProcessing(image):
    image = cv2.absdiff(image, background)
    h, gray = cv2.threshold(image, 65, 255, cv2.THRESH_BINARY_INV);
    gray = cv2.medianBlur(gray,5)

    kernel = np.ones((3,3), np.uint8)

    gray = cv2.erode(gray, kernel, iterations=1)#1

    des = cv2.bitwise_not(gray)
    tmp = cv2.findContours(des,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
    contour, hier = tmp[1], tmp[0]

    for cnt in contour:
        cv2.drawContours(des,[cnt],0,255,-1)

    gray = cv2.bitwise_not(des)

    gray = cv2.dilate(gray, kernel, iterations=1)#1

    return gray

Ошибка:

cv2.error: OpenCV (4.1.0) /io/opencv/modules/imgproc/src/drawing.cpp:2509: ошибка: (-215: утверждение не выполнено) npoints> 0 в функции 'drawContours'

1 Ответ

3 голосов
/ 26 апреля 2019

В зависимости от версии OpenCV, cv2.findContours() имеет различные подписи возврата.

В OpenCV 3.4.X, cv2.findContours() возвращает 3 элемента

image, contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

В OpenCV 4.1.X cv2.findContours() возвращает 2 элемента

contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

Вы можете легко получить контуры независимо от версии, подобной этой:

tmp = cv2.findContours(des,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
contours = tmp[0] if len(tmp) == 2 else tmp[1]
...