《深入理解OpenCV——实用计算机视觉项目解析》第四章学习。
在富特征上使用光流匹配的优势在于处理过程通常较快且能容纳更多的匹配点。
将结构KeyPoint转化成Point2f的代码如下:
void KeyPointsToPoints(const vector<KeyPoint>& kps, vector<Point2f>& ps)
{
ps.clear();
for (unsigned int i = 0; i<kps.size(); i++)
ps.push_back(kps[i].pt);
}
特征提取的方式可以根据实际情况改变,这里使用FAST特征点检测。
光流匹配的代码如下:
void OFMatch()
{
String fileName1 = "1.jpg";
String fileName2 = "2.jpg";
Mat img1;
Mat img2;
img1 = imread(fileName1,1);
img2 = imread(fileName2,1);
if (!img1.data || !img2.data)
{
cout << "error reading" << endl;
}
vector<KeyPoint>left_keypoints, right_keypoints;
//寻找左右两张图中的特征点
FastFeatureDetector ffd;
ffd.detect(img1, left_keypoints);
ffd.detect(img2, righ