Отслеживание мяча с преобразованием ХафPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Отслеживание мяча с преобразованием Хаф

Сообщение Anonymous »

Я пытаюсь отслеживать небольшой, быстро движущийся мяч пинг-понга с OpenCV в Python. Я сейчас использую преобразование Хаф, каковы лучшие параметры? Кроме того, является ли Hough лучшим вариантом или чем-то вроде эллиптического преобразования?circles= cv.HoughCircles(
blur, cv.HOUGH_GRADIENT, 1.2, 640,
param1=100, param2=20, minRadius=10,
maxRadius=40
)
< /code>
А вот код (в зависимости от света вокруг вас, вам, возможно, придется изменить # в строке 25 (уменьшить, если меньше света, наоборот: < /p>
import cv2 as cv
import numpy as np
camera=cv.VideoCapture(0)#webcam
camera.set(cv.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv.CAP_PROP_FRAME_HEIGHT, 480)
prev=None
dist= lambda x1,y1,x2,y2: (x1-x2)**2+(y1-y2)**2

while True:
sucess,frame= camera.read()
if sucess == False:
break
gray=cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #gray and blur the frame
blur=cv.GaussianBlur(gray,(9,9),2) #maybe get rid of the blurs for actuall use because blurring the table wont do anything. but it would help in case of the net so we'll see.
circles= cv.HoughCircles(blur, cv.HOUGH_GRADIENT, 1.2,480,param1=100, param2=20, minRadius=5, maxRadius=40) #mess with 1.2(dp), maybe params2 (points on edge to define), radius's
print(circles)#
if circles is not None: #if there are cirlces, circles var is a list
circles=np.uint16(np.around(circles))
chosen=None
for i in circles[0,:]:
x,y,r=i
mask= np.zeros_like(blur)
cv.circle(mask, (x, y), r, 255, -1)
mean = cv.mean(blur, mask=mask)[0]
if mean>130:
chosen=i
else:
continue
# print(circles)
if chosen is None: chosen =i
if prev is not None:
if dist(chosen[0],chosen[1],prev[0],prev[1])
Вот изображение, или вы можете использовать свою веб-камеру < /p>
Вот лучшее изображение!import cv2 as cv
import numpy as np
#camera=cv.VideoCapture(0)#webcam
#camera.set(cv.CAP_PROP_FRAME_WIDTH, 640)
#camera.set(cv.CAP_PROP_FRAME_HEIGHT, 480)
prev=None
dist= lambda x1,y1,x2,y2: (x1-x2)**2+(y1-y2)**2
path=input("Whats the image path?")
while True:
frame = cv.imread(path)
#if sucess == False:
#break
gray=cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #gray and blur the frame
blur=cv.GaussianBlur(gray,(9,9),2) #maybe get rid of the blurs for actuall use because blurring the table wont do anything. but it would help in case of the net so we'll see.
circles= cv.HoughCircles(blur, cv.HOUGH_GRADIENT, 1.2,480,param1=100, param2=20, minRadius=5, maxRadius=40) #mess with 1.2(dp), maybe params2 (points on edge to define), radius's
print(circles)#
if circles is not None: #if there are cirlces, circles var is a list
circles=np.uint16(np.around(circles))
chosen=None
for i in circles[0,:]:
x,y,r=i
mask= np.zeros_like(blur)
cv.circle(mask, (x, y), r, 255, -1)
mean = cv.mean(blur, mask=mask)[0]
if mean>130:
chosen=i
else:
continue
# print(circles)
if chosen is None: chosen =i
if prev is not None:
if dist(chosen[0],chosen[1],prev[0],prev[1])

Подробнее здесь: https://stackoverflow.com/questions/796 ... sformation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»