Я работаю над датчиком для ПИД-регулятора, поэтому в основном у меня есть камера, записывающая сцену. Чтобы управление работало, мне нужно выделить положение теннисного мяча на сцене в каждом кадре. Сцена с белым фоном и оранжевым теннисным мячом, как вы можете видеть на картинке:
И когда я запускаю его на своем Lenovo IdeaPad 100 (это довольно медленный компьютер), я получаю положение мяча, скажем, 1,2 секунды.
Я думаю, что это можно сделать намного быстрее, но я не знаю, что делать.
Любые советы и предложения приветствуются.
Я ожидаю систему, которая может генерировать как минимум 2 позиции каждую секунду
Вот мой код:
import numpy as np
import cv2
import time
cap = cv2.VideoCapture(0)
lower_red = np.array([0,100,100])
upper_red = np.array([20,255,255])
while(1):
start = time.time()
# Load an color image in grayscale
_,img = cap.read()
print("read")
#get the image's width and height
blurred = cv2.GaussianBlur(img, (11, 11), 0)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hsv2 = cv2.cvtColor(blurred,cv2.COLOR_BGR2HSV)
mask2 = cv2.inRange(hsv2, lower_red, upper_red)
mask2 = cv2.erode(mask2, None, iterations=2)
mask2 = cv2.dilate(mask2, None, iterations=2)
imageWidth = mask2.shape[1]
imageHeight = mask2.shape[0]
sum_i_white = 1
num_white = 1
sum_j_white = 1
for i in range(0,imageHeight):
for j in range(0,imageWidth):
if mask2[i][j] == 255:
sum_i_white += i
sum_j_white += j
num_white += 1
cv2.circle(img,(int(sum_j_white/num_white),int(sum_i_white/num_white)),3,(0,0,255), -1)
cv2.putText(img,'here',(int(sum_j_white/num_white),int(sum_i_white/num_white)), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,255), 1, cv2.LINE_AA)
cv2.imshow("final",img)
print(time.time()-start)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()