Python OPenCV Hough Circle долго загружал изображение с веб-камеры - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь взять видеопоток с веб-камеры и определить круги в нем, используя HoughCircles().Но всякий раз, когда я пытаюсь запустить код, видео занимает много времени, чтобы загрузить изображение, или вообще не загружает изображение.Любая помощь в том, как получить код для определения круга, будет принята с благодарностью.

Примечание: я не пытаюсь делать что-либо в реальном времени.Я просто хочу, чтобы базовая функция обнаружения кругов работала над видеопотоком с моей веб-камеры.

Вот код:

import cv2
import numpy as np
import sys

cap = cv2.VideoCapture(0)
width = 320
height = 240
dim = (width, height)
while(True):
    gray = cv2.medianBlur(cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY),5)
    resized = cv2.resize(gray,dim,interpolation = cv2.INTER_AREA)
    edges = cv2.Canny(gray,100,200)
    circ = cv2.HoughCircles(resized,cv2.HOUGH_GRADIENT,1,30,param1=50,param2=75,
                              minRadius=0,maxRadius=0)
    cv2.imshow('video',resized)
    if circ is not None:
        circ = np.uint16(np.around(circ))[0,:]
        print(circ)
        for j in circ:
            cv2.circle(resized, (j[0], j[1]), j[2], (0, 255, 0), 2)
        cv2.imshow('video',resized)
        if cv2.waitKey(1)==27:# esc Key
            break
cap.release()
cv2.destroyAllWindows()

Еще раз спасибо за любую помощь.

1 Ответ

0 голосов
/ 13 декабря 2018

ОК, я понял это.Мне пришлось уменьшить беспорядок с параметрами в HoughCircles.Я изменил circ = cv2.HoughCircles(resized,cv2.HOUGH_GRADIENT,1,30,param1=50,param2=75, minRadius=0,maxRadius=0) на cv2.HoughCircles(resized,cv2.HOUGH_GRADIENT,1,50,param1=50,param2=35, minRadius=0,maxRadius=0), что позволяет коду отображать видеопоток, обнаруживая круги с разумной частотой кадров.Также спасибо @ZdaR за помощь.

Вот код, который работает

import cv2
import numpy as np
import serial

cap = cv2.VideoCapture(1)
width = 320
height = 240
dim = (width, height)
while(True):
    gray = cv2.medianBlur(cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY),5)
    resized = cv2.resize(gray,dim,interpolation = cv2.INTER_AREA)
    circ = cv2.HoughCircles(resized,cv2.HOUGH_GRADIENT,1,50,param1=50,param2=35,
                              minRadius=0,maxRadius=0)
    cv2.imshow('video',resized)
    if circ is not None:
        circ = np.uint16(np.around(circ))[0,:]
        print(circ)
        for j in circ:
            cv2.circle(resized, (j[0], j[1]), j[2], (0, 255, 0), 2)  
        cv2.imshow('video',resized)
        if cv2.waitKey(1)==27:# esc Key
            break
cap.release()
cv2.destroyAllWindows()
...