我目前正在编写一个项目,允许机器人根据天花板的照片找到它的位置。摄像机安装在机器人上并直接面向天花板(意味着照片的中心始终被视为机器人的位置)。我们的想法是使用第一张照片建立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;
}
是否有任何功能可以帮助我做到这一点?
答案 0 :(得分:0)
如果图像距离不远,光流可能是更好的选择。有关如何使用它的详细信息,请查找有关cv :: calcOpticalFlowPyrLK的文档。