具体解决的场景是 当你的相机在标定后如果不小心被触碰后,摄像机前后拍摄的图像来检测相机是否发生移动,从而准确定位到是哪个相机方便后续进行调整。具体的程序也很简单,具体思路为
利用sift寻找两张图像的匹配特征点——去除误匹配点——利用匹配点的欧式距离由小到大排序——以10.5为阈值点>10.5则认为有轻微移动(10.5是自己粗略估计值)
具体程序如下
#include <iostream>
#include<algorithm>
#include <opencv2/opencv.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv; //包含cv命名空间
using namespace std;
int main() {
//Create SIFT class pointer
Ptr<Feature2D> f2d = xfeatures2d::SIFT::create();
vector<Mat> img_1;
vector<Mat> img_2;
char srcname[100];
char dstname[100];
int number = 19;
for (int i = 0; i < number; i++)
{
sprintf(srcname, "./data/src/%04d.jpg", i);
sprintf(dstname, "./data/dst/%04d.jpg", i);
img_1.push_back(imread(srcname));
img_2.push_back(imread(dstname));
if (img_1.empty