Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用OpenCV更有效地隔离篮球场?_Python_Opencv_Computer Vision - Fatal编程技术网

Python 如何使用OpenCV更有效地隔离篮球场?

Python 如何使用OpenCV更有效地隔离篮球场?,python,opencv,computer-vision,Python,Opencv,Computer Vision,我的目标是尝试在下面的框架中孤立法庭,并概述它: 我正在使用OpenCV for Python,以下是我执行以下步骤后的结果: 将图像转换为HSV 在给定色调范围内隔离像素 开发按位和掩码 利用Canny边缘检测 这是我的面具: 下面是我的Canny边缘检测器的结果: 正如你所看到的,我的Canny探测器性能很差,我的面罩中有很多噪音。我尝试了一些技术,包括侵蚀和扩张,但没有太大帮助 我还能做些什么来确保当我把面具传给Hough线变换器时,它实际上能够检测到球场的边缘 以下是一些代码供参考

我的目标是尝试在下面的框架中孤立法庭,并概述它:

我正在使用OpenCV for Python,以下是我执行以下步骤后的结果:

  • 将图像转换为HSV
  • 在给定色调范围内隔离像素
  • 开发按位和掩码
  • 利用Canny边缘检测
  • 这是我的面具:

    下面是我的Canny边缘检测器的结果:

    正如你所看到的,我的Canny探测器性能很差,我的面罩中有很多噪音。我尝试了一些技术,包括侵蚀和扩张,但没有太大帮助

    我还能做些什么来确保当我把面具传给Hough线变换器时,它实际上能够检测到球场的边缘

    以下是一些代码供参考:

    img = cv2.imread('imgs/bulls.jpg')
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    
    court_color = np.uint8([[[160,221,248]]])
    hsv_court_color = cv2.cvtColor(court_color, cv2.COLOR_BGR2HSV)
    hue = hsv_court_color[0][0][0]
    
    # define range of blue color in HSV
    lower_color = np.array([hue - 10,10,10])
    upper_color = np.array([hue + 10,255,255])
    
    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv_img, lower_color, upper_color)
    
    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(img,img, mask= mask)
    
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title('Original Image'), plt.show()
    plt.imshow(mask, cmap='Greys'), plt.title('Mask'), plt.savefig('imgs/mask.jpg'), plt.show()
    
    # Erosion
    kernel = np.ones((2,2),np.uint8)
    erosions2 = cv2.erode(mask,kernel,iterations = 5)
    
    # Dilation
    dilation = cv2.dilate(mask,kernel,iterations = 3)
    
    # Opening
    opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    
    # Closing
    closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
    

    编辑:我试图复制这项研究:web.stanford.edu/class/ee368/Project\u Spring\u 1415/Reports/…。我想通过检测球场轮廓的直线来隔离球场,这样我最终可以使用单应性来找到球场上球员的坐标。

    在这种情况下,检测图像上的霍夫线是最好的选择,因为球场颜色可以在不同的地点和相机设置之间变化。检测线条,并使用统一的色块进行进一步处理,应该可以让您以一定的精度分割球场区域。

    最后您希望得到什么?你需要一个框架面具吗?@SergAnuke我正试图复制这项研究:。我想通过检测球场轮廓的直线来隔离球场,这样我最终可以使用单应性来找到球场上球员的坐标。唯一的问题是,除非我能够尽可能地将球场与画面的其他部分隔离,否则会有很多噪音。我目前正在寻找最好的方法来隔离球场,我很难消除人群中的噪音,以及每个画面中其他不相关的物体。