在白色背景中跟踪白球(Python/OpenCV)

2024-10-01 15:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3中使用OpenCV来检测白地上的一个白/黑球,并给出它的精确(x,y,radius)和颜色。在

我使用函数cv2.Canny()和cv2.findConteurs()来查找它,但问题是cv2.Canny()并不总是检测到圆的完整形状(大多数情况下只检测圆的3/4)。 因此,当我使用cv2.findConteurs()时,它不会将其检测为轮廓。在

请看:

image 1image 2

这是最重要的代码:

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred, 10, 40) # 10 and 40 to be more perceptive
contours_canny= cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]

之后我使用: approx = cv2.approxPolyDP(contour,0.01*cv2.arcLength(contour,True),True)

<> >强,如果你能帮我找到一个解决办法,那就太好了! 也许有一个函数可以完成圆的形状,这样我就可以检测到它了?


Tags: 函数true颜色cv2opencvpython3contour形状
2条回答

我建议您在使用canny检测之前应用一些中间颜色过滤。这将确保canny边缘检测发生在球图像和场之间的边界上。在

下面是一个python代码,它使用trackbar来定制颜色阈值:

cv2.namedWindow('temp')
cv2.createTrackbar('bl', 'temp', 0, 255, nothing)
cv2.createTrackbar('gl', 'temp', 0, 255, nothing)
cv2.createTrackbar('rl', 'temp', 0, 255, nothing)
cv2.createTrackbar('bh', 'temp', 255, 255, nothing)
cv2.createTrackbar('gh', 'temp', 255, 255, nothing)
cv2.createTrackbar('rh', 'temp', 255, 255, nothing)

bl_temp=cv2.getTrackbarPos('bl', 'temp')
gl_temp=cv2.getTrackbarPos('gl', 'temp')
rl_temp=cv2.getTrackbarPos('rl', 'temp')

bh_temp=cv2.getTrackbarPos('bh', 'temp')
gh_temp=cv2.getTrackbarPos('gh', 'temp')
rh_temp=cv2.getTrackbarPos('rh', 'temp')
thresh=cv2.inRange(frame,(bl_temp,gl_temp,rl_temp),(bh_temp,gh_temp,rh_temp))

你可以用HoughCircles简历估计最佳匹配的完整圆。球跟踪的好处是,无论相机角度如何,球在图像中始终显示为一个圆。在

相关问题 更多 >

    热门问题