我的目标是尝试在以下框架中将法院隔离开来并概述一下:
python - 如何使用OpenCV更有效地隔离篮球场?-LMLPHP

我将OpenCV用于Python,这是按照以下步骤操作后的结果:

  • 将图像转换为HSV
  • 隔离给定色调范围内的像素
  • 开发按位与掩码
  • 使用Canny边缘检测

  • 这是我的面具:
    python - 如何使用OpenCV更有效地隔离篮球场?-LMLPHP

    这是我的Canny边缘检测器的结果:
    python - 如何使用OpenCV更有效地隔离篮球场?-LMLPHP

    如您所见,我的Canny探测器性能很差,并且口罩中有很多噪音。我尝试了某些技术,包括侵 eclipse 和扩张,但并没有太大帮助。

    我还能做些什么来确保将面罩传递到霍夫线变压器时,它实际上能够检测到球场的边缘?

    这是一些代码供参考:
    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_Spring_1415/Reports/…。我想通过检测勾勒出球场轮廓的直线来隔离球场,以便最终使用单应性法来找到球场上球员的坐标。

    最佳答案

    在这种情况下,最好检测图像上的强线,因为法庭的颜色可能会在不同地方以及相机设置之间发生变化。检测线条,并使用统一的色块进行一些进一步的处理,应使您可以准确地分割球场区域。

    08-05 04:37