我正在研究PID控制器的传感器,因此基本上我有一个摄像机来记录场景。为了使控制正常工作,我需要在每个帧中提取网球在场景中的位置。场景设置为白色背景和橙色网球,如您在图像上看到的:
当我在lenovo ideapad 100(这是非常慢的PC)上运行它时,我得到了球的位置,比如说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()
答案 0 :(得分:0)
你知道什么慢吗? 我知道您可以使用Python运行C程序。 因此,如果您的double for非常慢,则可以使C程序运行此代码。 如果您将juste数组和int作为输入,并将int作为输出,我认为应该不难。 但是我不知道这是否有用。