2013-07-27 1 views
0

현재 로봇이 천장 사진에 따라 위치를 찾을 수있는 프로젝트를 작성 중입니다. 카메라는 로봇에 장착되어 천장에 직접 마주보고 있습니다. 즉, 사진의 중앙이 항상 로봇의 위치로 간주됩니다. 첫 번째 사진을 사용하여 x, y 축의 0,0 위치와 방향을 설정 한 다음 그 사진과 다음 사진 (약간 다른 위치에서 찍음) 사이의 거리와 회전을 찾고 새 0을 설정합니다. x, y 축의 0 위치와 방향 등등.SIFT를 사용하여 두 장의 사진 사이의 거리 찾기

#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

이미지가 멀리 떨어져 있지 않으면 광학 흐름이 더 좋은 옵션 일 수 있습니다. 이것을 사용하는 방법에 대한 자세한 내용은 cv :: calcOpticalFlowPyrLK에 대한 설명서를 참조하십시오.