我目前正在编写一个项目,该项目将允许机器人根据天花板的照片找到它的位置。摄像头安装在机器人上,正对天花板(意味着照片的中心始终被认为是机器人的位置)。这个想法是使用第一张照片建立 x,y 轴的 0,0 位置和方向,然后找到该照片与下一张照片之间的距离和旋转(将在稍微不同的位置拍摄)并建立新的 0, 0 x,y 轴的位置和方向等。我正在使用以下算法(到目前为止仅在一张图像上)找到照片上的特征:
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("ceiling.jpg");
if (img.empty())
{
cout << "Cannot load an image!" << endl;
getchar();
return -1;
}
SIFT sift(10); //number of keypoints
vector<KeyPoint> key_points;
Mat descriptors, mascara;
Mat output_img;
sift(img,mascara,key_points,descriptors);
drawKeypoints(img, key_points, output_img);
namedWindow("Image");
imshow("Image", output_img);
imwrite("image.jpg", output_img);
waitKey(0);
return 0;
}
有什么功能可以帮助我做到这一点吗?