0

我目前正在编写一个项目,该项目将允许机器人根据天花板的照片找到它的位置。摄像头安装在机器人上,正对天花板(意味着照片的中心始终被认为是机器人的位置)。这个想法是使用第一张照片建立 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;
}

有什么功能可以帮助我做到这一点吗?

4

1 回答 1

0

如果图像相距不远,光流可能是更好的选择。查找有关 cv::calcOpticalFlowPyrLK 的文档以获取有关如何使用它的详细信息。

于 2013-07-30T02:34:35.173 回答