这是我在CSDN上第一次尝试写文章,有点兴奋,有点紧张。
那就正式开始吧。以下,enjoy:
要解决的问题
地面可移动机器人的车体摄像头捕捉一个方形箱子,类似于我们平时见到的大一点的快递箱子。我需要做的工作是在识别这个箱子并在视频中跟踪检测这个箱子。
解决问题的思路
1.图像经过均值滤波处理和Canny边缘检测之后,箱子是一个白色的矩形。所以我只要把这个白色矩形找到就可以了。
但是问题来了,我怎么判断这个箱子在图像的哪个位置呢?毕竟图像中白色闭合矩形可能不止一个。
2.第一帧图像需要人眼识别箱子并在箱子所在区域点击一个小红点,大概确定了箱子的位置。往后判断出箱子矩形区域后,取中心点坐标作为下一帧图像的箱子区域坐标判断起点。
算法实现
先贴上代码,备注比较详细,应该容易看懂,对于不熟悉Opencv相关函数的同学,百度一下也就懂了。
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <cstdlib>
#include "cv.h"
#include "cvaux.h"
#include "cxcore.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
//定义全局变量
Mat img,tmp,img1;
static Point pre_pt = (-1,-1);//初始坐标
static Point cur_pt = (-1,-1);//实时坐标
static Point avg_pt = (-