기초 구성 및 이미지 로드 시스템 설계
이 글에서는 단목 카메라 기반의 시각적 자세 추정(VO, Visual Odometry) 모듈을 처음부터 직접 구현하는 과정을 기록합니다. 이번 단계에서는 설정 파일 읽기, 이미지 경로 관리, 그리고 이미지 데이터를 로드하는 기본 클래스를 작성합니다.
1. 설정 파일 파싱 (YAML 형식)
설정 정보는 .yaml 파일에 저장되며, OpenCV의 FileStorage를 활용해 읽어옵니다.
cv::FileStorage fs("/home/cc/myslam_ws/config/default.yaml", cv::FileStorage::READ);
std::string dataset_path;
fs["dataset_dir"] >> dataset_path;
2. 이미지 파일 불러오기
저장된 경로와 파일 이름을 조합하여 이미지를 로드합니다.
cv::Mat image = cv::imread(dataset_path + "/" + filename);
3. 헤더 파일 정의
이미지 로딩을 위한 클래스를 선언합니다.
#ifndef IMAGE_LOADER_H
#define IMAGE_LOADER_H
#include <opencv2/core.hpp>
#include <string>
namespace myslam {
class ImageLoader {
private:
std::string data_root;
public:
cv::Mat frame;
ImageLoader(const std::string& file_name);
};
} // namespace myslam
#endif // IMAGE_LOADER_H
4. 구현 파일 작성
생성자에서 설정 파일을 읽고 이미지를 로드합니다.
#include "image_loader.h"
namespace myslam {
ImageLoader::ImageLoader(const std::string& file_name) {
cv::FileStorage config("/home/cc/myslam_ws/config/default.yaml",
cv::FileStorage::READ);
config["dataset_dir"] >> data_root;
std::string full_path = data_root + "/" + file_name;
frame = cv::imread(full_path);
if (frame.empty()) {
std::cerr << "Failed to load image: " << full_path << std::endl;
}
}
} // namespace myslam
5. 테스트 프로그램 작성
입력 인자를 통해 이미지 파일명을 받아 화면에 표시합니다.
#include "image_loader.h"
#include <opencv2/highgui.hpp>
int main(int argc, char** argv) {
if (argc != 2) {
std::cout << "Usage: ./test_image_loader <image_name>" << std::endl;
return -1;
}
std::string filename = argv[1];
myslam::ImageLoader loader(filename);
if (loader.frame.empty()) {
std::cerr << "Image loading failed." << std::endl;
return -1;
}
cv::imshow("Loaded Image", loader.frame);
cv::waitKey(0);
return 0;
}
6. CMakeLists.txt 구성
빌드 시스템을 설정하고 라이브러리 및 실행 파일을 생성합니다.
cmake_minimum_required(VERSION 2.8)
project(vision_odometry_core)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${CMAKE_SOURCE_DIR}/include)
add_library(image_loader STATIC src/image_loader.cpp)
add_executable(test_image_loader test/main.cpp)
target_link_libraries(test_image_loader ${OpenCV_LIBS} image_loader)
7. 빌드 및 실행
터미널에서 다음 명령어를 실행하면 테스트가 완료됩니다.
mkdir build
cd build
cmake ..
make
./test_image_loader 1.png