Projeto acadêmico de visão computacional que identifica uma bola pela cor, acompanha seu movimento em vídeo e desenha a trajetória recente do objeto em tempo real.
A apresentação completa e a execução do projeto estão disponíveis no YouTube.
- Captura frames da webcam ou de um arquivo de vídeo.
- Redimensiona e suaviza a imagem com filtro Gaussiano.
- Converte o frame do espaço BGR para HSV.
- Cria uma máscara usando limites de cor configurados.
- Aplica erosão e dilatação para reduzir ruídos.
- Encontra o maior contorno e calcula seu centro.
- Armazena as posições recentes e desenha a trajetória.
O utilitário range_detector.py permite ajustar interativamente os limites HSV. A imagem abaixo reúne o frame original, a máscara binária e os controles usados na calibração da bola:
Depois da segmentação, o maior contorno é usado para calcular o círculo, o centróide e a sequência de posições que forma o rastro:
- Python
- OpenCV
- NumPy
- imutils
git clone https://github.com/Adrianozk/ball_tracking.git
cd ball_tracking
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtNo Windows, ative o ambiente virtual com:
.venv\Scripts\activateFaça a calibração com o mesmo objeto, câmera e iluminação que serão usados no rastreamento.
Com a webcam:
python range_detector.py --filter HSV --webcam --previewCom uma imagem:
python range_detector.py --filter HSV --image image.png --previewA janela Trackbars exibe seis controles:
| Controle | Função |
|---|---|
H_MIN e H_MAX |
Delimitam a tonalidade da cor. No OpenCV, o canal H útil vai de 0 a 179. |
S_MIN e S_MAX |
Delimitam a saturação. Aumentar S_MIN ajuda a excluir regiões cinzas, brancas ou pouco coloridas. |
V_MIN e V_MAX |
Delimitam o brilho. Aumentar V_MIN ajuda a excluir regiões escuras. |
- Comece com os mínimos em
0e os máximos em255. - Ajuste primeiro
H_MINeH_MAXaté isolar a cor da bola. - Aumente
S_MINpara remover regiões com pouca saturação. - Aumente
V_MINpara remover sombras e regiões escuras. - Normalmente,
S_MAXeV_MAXpodem permanecer em255. - Procure deixar a bola inteira visível e contínua, com o restante da imagem preto. Pequenos pontos isolados podem prejudicar a detecção.
- Anote os seis valores e pressione
qpara encerrar.
Com --preview, os pixels aceitos mantêm a cor original e o restante fica preto. Sem essa opção, o programa mostra também a máscara binária na janela Thresh.
Abra ball_tracking.py e localize estas variáveis:
lower = (2, 139, 98)
upper = (33, 255, 197)Substitua-as usando esta correspondência:
lower = (H_MIN, S_MIN, V_MIN)
upper = (H_MAX, S_MAX, V_MAX)Por exemplo, se o calibrador indicar H_MIN=0, S_MIN=56, V_MIN=109, H_MAX=7, S_MAX=165 e V_MAX=255, configure:
lower = (0, 56, 109)
upper = (7, 165, 255)Os valores podem precisar de nova calibração quando a câmera, o objeto ou a iluminação forem alterados.
Usando a webcam:
python ball_tracking.pyUsando um vídeo:
python ball_tracking.py --video caminho/para/video.mp4Alterando o tamanho do histórico usado para desenhar o rastro:
python ball_tracking.py --buffer 32Pressione q para encerrar.
- A detecção depende da iluminação e do contraste entre o objeto e o ambiente.
- Os limites HSV estão definidos no código e podem exigir nova calibração.
- O rastreamento usa segmentação por cor, não um modelo de aprendizado de máquina.
- O projeto tem finalidade acadêmica e demonstrativa.
A implementação foi desenvolvida com base no tutorial Ball Tracking with OpenCV, de Adrian Rosebrock, e adaptada para o trabalho acadêmico da equipe.
- Adriano Luís Fernandes
- João Gabriel Oliveira
- Victor Barbosa de Santana
- Luiz Gustavo Moreira de Oliveira
- Marcelo Pedroni