Как найти окружности с выбраных контуров opencv?

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

import cv2
import numpy as np
import skimage
import imutils
from imutils import contours
from skimage import measure
import argparse
from skimage.exposure import is_low_contrast
from skimage import feature
import math
image = cv2.imread("3.jpg")


clahe = cv2.createCLAHE(clipLimit=3., tileGridSize=(8,8))

lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)  #convert from BGR to LAB color space
l, a, b = cv2.split(lab)  # split on 3 different channels

l2 = clahe.apply(l)  #apply CLAHE to the L-channel

lab = cv2.merge((l2,a,b))  #merge channels
img2 = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)  #convert from LAB to BGR

blur = cv2.GaussianBlur(img2, (7,7), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)

mask = cv2.inRange(hsv, (0,0,0), (179,255,70))

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel, iterations=1)

close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)#this is monchrome image for recognition


cnts,_ = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

image_copy = image.copy#.copy()

contour_list = []
for c in cnts:
    approx = cv2.approxPolyDP(c,0.01*cv2.arcLength(c,True),True)
    area = cv2.contourArea(c)


    contour_list.append(c)
    newfiltr = cv2.drawContours(image, contour_list, -1, (255, 0, 0), -1)



cv2.imshow('Contours', image)

if cv2.waitKey(0):
    cv2.destroyAllWindows()

пример работающего фильтра: https://drive.google.com/file/d/1-3mC4HddKvnVrO4YllQtIG0XwPEkP9IH/view?usp=sharing


Ответы (1 шт):

Автор решения: KateK

Исправление строки cap = cv2.VideoCapture('C:/Users/Master/Desktop/New/forowner/Video.asf') помогло.

→ Ссылка