python中的球检测运行速度非常慢,是否有提高技巧?

时间:2019-03-24 14:21:05

标签: python computer-vision

我正在研究PID控制器的传感器,因此基本上我有一个摄像机来记录场景。为了使控制正常工作,我需要在每个帧中提取网球在场景中的位置。场景设置为白色背景和橙色网球,如您在图像上看到的: enter image description here

当我在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()

1 个答案:

答案 0 :(得分:0)

你知道什么慢吗? 我知道您可以使用Python运行C程序。 因此,如果您的double for非常慢,则可以使C程序运行此代码。 如果您将juste数组和int作为输入,并将int作为输出,我认为应该不难。 但是我不知道这是否有用。