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

标签 python opencv computer-vision

我的目标是尝试将球场隔离在下面的框架中并勾勒出它的轮廓: enter image description here

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

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

这是我的面具: enter image description here

这是我的 Canny 边缘检测器的结果: enter image description here

如您所见,我的 Canny 检测器性能很差,我的 mask 中有很多噪音。我尝试了某些技术,包括腐 eclipse 和膨胀,但它们并没有太大帮助。

我还能做些什么来确保当我将 mask 传递给 Hough Line Transformer 时,它实际上能够检测到球场的边缘?

这里有一些代码供引用:

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/…。我想通过检测勾勒出球场轮廓的直线来隔离球场,以便我最终可以使用单应性来找到球场上球员的坐标。

最佳答案

在这种情况下,检测图像上的霍夫线是您的最佳选择,因为 field 颜色和相机设置会因地而异。检测线条并使用统一的色 block 进行一些进一步处理应该可以让您以一定的准确性分割球场区域。

关于python - 如何使用 OpenCV 更有效地隔离篮球场?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779690/

相关文章:

c++ - 将 cv::Mat 转换为 Magick::Image

python 复制带有元数据的文件,shutil 与手动打开和写入重复文件

python - 错误:(-215:声明失败)函数 'imshow'中的size.width> 0 && size.height> 0

python - 在python中获取坐标列表的平均值

php - 从图像到数字

opencv - 如何找到稍微拉长的椭圆形/带有弯角的矩形/有时是圆弧形的形状?

matlab - 什么是最好的相机校准方法?

python - 没有使用 python 请求模块获取所有 cookie 信息

c++ - OpenCV C++ Linux g++ 编译

c++ - 使用 CMAKE 将包查找到开发库