原意是想做一个捡网球的机器人,识别网球就是必须的。项目地址http://git.oschina.net/caogos/OpenLoongsonPickUpTennisRobot
参考了 http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/
主要思路
用cvtColor()将图像转换到HSV颜色空间,用inRange()根据网球颜色提取出网球,通过形态学变换(膨胀和腐蚀)除去网球上的条纹和字,使识别出的网球更圆,用findContours()找轮廓,再用minEnclosingCircle()找轮廓的最小外接圆。
源码
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <sys/time.h>
#include "v4l2_capture_picture.h"
using namespace std;
using namespace cv;
#define CAPTURE_PICTURE_PATH "/test/PickUpTennisRobot/capture_picture.jpg"
// 图片中网球的最小半径,注意不是实际的网球半径
#define MIN_CIRCLE_RADIUS (25)
// 打印当前时间
void PrintCurrentTime(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
cout << tv.tv_sec << "." << tv.tv_usec << endl;
}
int main(int argc, char** argv)
{
Mat src, src_gray;
int ret = 0;
/*
// 通过摄像头抓拍
ret = capture_picture(CAPTURE_PICTURE_PATH);
if (0 != ret)
{
std::cout << "capture_picture fail." << std::endl;
return ret;
}
*/
/// Rea