使用opencv跟踪小球
时间: 2023-09-22 18:07:03 浏览: 51
好的,下面是使用OpenCV跟踪小球的步骤:
1. 导入OpenCV库和其他必要的库
```python
import cv2
import numpy as np
```
2. 读取视频或摄像头的输入流
```python
cap = cv2.VideoCapture(0)
```
3. 定义跟踪的颜色范围
```python
lower_range = np.array([30, 150, 50])
upper_range = np.array([255, 255, 180])
```
这里使用的是HSV颜色空间,可以通过调整范围来适应不同的场景。
4. 循环读取每一帧并进行处理
```python
while True:
# 读取每一帧
ret, frame = cap.read()
# 转换颜色空间为HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 根据颜色范围创建掩膜
mask = cv2.inRange(hsv, lower_range, upper_range)
# 进行形态学处理,去除噪点
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
# 寻找轮廓
contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 如果找到了轮廓
if len(contours) > 0:
# 找到面积最大的轮廓
c = max(contours, key=cv2.contourArea)
# 计算轮廓的最小外接圆
((x, y), radius) = cv2.minEnclosingCircle(c)
# 如果圆的半径足够大,就将其画出来
if radius > 10:
cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
cv2.imshow("Frame", frame)
# 如果按下q键,就退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
```
在循环中,首先读取每一帧,并将其转换为HSV颜色空间。然后根据颜色范围创建掩膜,进行形态学处理以去除噪点。接着寻找轮廓,并找到面积最大的轮廓,计算其最小外接圆,并将圆画出来。
5. 释放资源
```python
cap.release()
cv2.destroyAllWindows()
```
完整代码如下:
```python
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
lower_range = np.array([30, 150, 50])
upper_range = np.array([255, 255, 180])
while True:
ret, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lower_range, upper_range)
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if len(contours) > 0:
c = max(contours, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
if radius > 10:
cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
这样就可以使用OpenCV跟踪小球了。