Как я могу обнаружить один контур внутри другого с помощью Opencv? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь сделать белый контур (белые таблички автомобиля) внутри желтого контура (такси), но я даже не узнаю белый цвет этой таблички в HSV, как я могу решить эту проблему? В коде я использую трекбары, чтобы иметь возможность изменять значения RGB по моей воле. Спасибо!

import cv2
import numpy as np
kernel = np.ones((5,5),np.uint8)


def dibujarblanco(maskblanco,color):


    _,contornos,_=cv2.findContours(maskblanco, 
cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

    for c in contornos:
                area = cv2.contourArea(c)
                    if area > 200:

                        nuevocontorno = cv2.convexHull(c)
                        cv2.drawContours(frame, [nuevocontorno], 0, color,3)


def nothing(x):
    pass
video = cv2.VideoCapture("taxismenor.mp4")

cv2.namedWindow("Barras Blanco")

cv2.createTrackbar("B", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("G", "Barras Blanco", 0, 255, nothing)
cv2.createTrackbar("R", "Barras Blanco", 0, 255, nothing)

while(1):
    _, frame=video.read()
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)  

    B = cv2.getTrackbarPos("B", "Barras Blanco")
    G = cv2.getTrackbarPos("G", "Barras Blanco")
    R = cv2.getTrackbarPos("R", "Barras Blanco")

    blanco = np.uint8([[[B, G, R]]])
    hsvBlanco = cv2.cvtColor(blanco,cv2.COLOR_BGR2HSV)
    lowerLimitb = np.uint8([hsvBlanco[0][0][0]-10,100,100])
    upperLimitb = np.uint8([hsvBlanco[0][0][0]+10,255,255])


    maskblanco = cv2.inRange(hsv, lowerLimitb, upperLimitb)                    


    dibujarblanco(maskblanco,(0,0,255))

    cv2.imshow("frame", frame)
    cv2.imshow("maskblanco", maskblanco)

    key = cv2.waitKey(1)

    if key == 27:
        break

cv2.destroyAllWindows()

Это является результатом попытки набросать белый цвет пластин. Ничего, не работает.

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Вы можете использовать cv.findContours () для извлечения всей иерархии контуров

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

иерархия

Необязательный выходной вектор (например, std :: vector), содержащий информацию о топологии изображения. Он имеет столько же элементов, сколько число контуров. Для каждого i-го контура контура [i] иерархия элементов [i] [0], иерархия [i] [1], иерархия [i] [2] и иерархия [i] [3] установлены в 0- основанные индексы в контурах следующего и предыдущего контуров на том же иерархическом уровне, первый дочерний контур и родительский контур, соответственно. Если для контура i нет следующих, предыдущих, родительских или вложенных контуров, соответствующие элементы иерархии [i] будут отрицательными.

0 голосов
/ 06 мая 2019

Я думаю, что вы могли бы сначала установить контур (taix) на цвет фона изображения. Затем скопируйте это изображение, чтобы обнаружить следующий контур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...