当前位置: 首页 > 知识库问答 >
问题:

如何使用OpenCV检测足球场中的线条

经伟
2023-03-14

我使用Canny来检测边缘,然后Hough Lines转换以获得线条,我想我找不到适合我使用的正确参数

imgsrc = cv2.imread("image.png")

# Resize to improve detection accuracy
t = int(img.shape[1] * 1.6)
img = imutils.resize(imgsrc, width=t)

# Apply gaussian blur
kernel_size = 3
img = cv2.GaussianBlur(img, (kernel_size, kernel_size), 0)

# Convert to grayscale
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Initialize morph-kernel, apply CLOSE before Canny to improve edges detection
kernel0 = np.ones((9,27), np.uint8)
img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel0)

# Detect edges
low_threshold = 5
high_threshold = 50
edges = cv2.Canny(img, low_threshold, high_threshold)

# Initialize morph-kerne, apply CLOSE after Canny to merge edges
kernel2 = np.ones((8,24), np.uint8)
edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel2)

# Hough Lines params
rho = 1  # distance resolution in pixels of the Hough grid
theta = np.pi / 180  # angular resolution in radians of the Hough grid
# minimum number of votes (intersections in Hough grid cell)
threshold = 30
min_line_length = 50  # minimum number of pixels making up a line
max_line_gap = 40  # maximum gap in pixels between connectable line segments

# Run Hough on edge detected image
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]), min_line_length, max_line_gap)

output = np.copy(imgsrc) * 0  # creating a blank to draw lines on
for line in lines:
    for x1, y1, x2, y2 in line:
        cv2.line(output, (int(x1), int(y1)), (int(x2), int(y2)), (255, 255, 255), thickness)

你知道我该如何改进线路检测,最终只得到几条线路吗?

共有1个答案

鲁华灿
2023-03-14

以下是Python中的解决方案代码:

import cv2
from matplotlib import pyplot as plt
import numpy

im = cv2.imread("foot.png")
B = im[:,:,2]
Y = 255-B

thresh = cv2.adaptiveThreshold(Y,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
            cv2.THRESH_BINARY_INV,35,5)

contours, hierarchy = cv2.findContours(thresh,  
    cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 

x=[]
for i in range(0, len(contours)):
    if cv2.contourArea(contours[i]) > 100:
        x.append(contours[i])
cv2.drawContours(im, x, -1, (255,0,0), 2) 

plt.imshow(im)

玩参数得到想要的结果。

 类似资料:
  • 我正在做一个小的OpenCV项目,从手机摄像头中检测某种颜色的线条。 null 这些是我想使用的函数,但不能安静地确定如何填补缺失的位。 这是在处理来自CvVideoCamera实例的图像时,从智能手机应用程序调用的processImage函数 我无法理解这里的文档,因为C++方法签名没有方法字段 任何帮助都将不胜感激。

  • 问题内容: 我有一台固定的摄像机,指向室内区域。人们将走过相机,距离相机约5米。使用 OpenCV ,我想检测走过的人- 我的理想回报是一组检测到的具有矩形边界的人。 我看了几个内置示例: 没有一个 Python 示例真正适用 该 ç 斑点跟踪样品看起来很有希望,但不接受现场视频,这使得检测困难。它也是最复杂的示例,使得提取相关知识并将其转换为有问题的Python API。 该 ç “motemp

  • 本文向大家介绍使用OpenCV检测图像中的矩形,包括了使用OpenCV检测图像中的矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现。 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波

  • 我正在尝试使用Python OpenCV和Hough变换算法检测表线并从图像中提取完整的表。我需要有每条线的所有坐标,目的是绘制相同比例的相同表格。我了解Hough变换的工作原理,并尝试在没有OpenCV的情况下实现它,但在大图像上速度非常慢。 这是来自示例OpenCV Hough Transfrom的代码 Canny边缘检测返回图像Canny边缘检测结果 但是检测的结果是豪斯变换的结果 我不知道

  • 本文向大家介绍利用Opencv中Houghline方法实现直线检测,包括了利用Opencv中Houghline方法实现直线检测的使用技巧和注意事项,需要的朋友参考一下 利用Opencv中的Houghline方法进行直线检测—python语言 这是给Python部落翻译的文章,请在这里看原文。 在图像处理中,霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲。 下面我们将看

  • 问题内容: 我想使用OpenCV 2.4.1软件包随附的Tutorial 2-Basic作为起点,使用Android版OpenCV检测椭圆。请注意,我的椭圆将是一个完美的photoshop之一。 据我了解,使用“ HoughCircles”只会找到完美的(或大约)圆,因此省略了椭圆。 任何帮助将不胜感激,因为我是OpenCV的初学者 到目前为止,这是我尝试过的 如果您认为更多信息可能有用,请告诉我