본문 바로가기
런닝머신 (ML)

[컴퓨터 비전 & 머신러닝] OpenCV 데이터 파일 출력

728x90

FileStorage 클래스 : 데이터 파일 입출력을 담당하는 클래스

 

open() 함수 : 실제 사용할 파일을 여는 함수

virtual bool open(const String& filename, int flags, const String& encoding = String());
//filename -> 파일이름
//flags -> 파일 열기 모드
//encoding -> 파일 인코딩 방식

파일 열기 모드 열거형 상수

FileStorage::READ 읽기 모드
FileStorage::WRITE 쓰기 모드 ( 새로 생성 )
FileStorage::APPEND 추가로 쓰기 모드
FileStorage::MEMORY 논리합 연산자를 이용하여 READ나 WRITE 상수와 함께 사용될 경우, 실제 차일 입출력 대신 메모리 버퍼를 이용한 입출력을 수행

 

isOpened() 함수 : 파일이 정상적으로 열렸는지 확인하는 함수

release() 함수 : 사용하고 있던 파일을 닫고 메모리 버퍼를 해제하는 함수

 

void writeData()
{
	//파일에 저장할 데이터 변수 선언
	String name = "Zen";
	int age = 22;
	Point pt1(300, 400);
	vector<int> scores = { 12, 34, 56 };
	Mat mat1 = (Mat_<float>(2, 2) << 1.0f, 1.5f, 2.0f, 3.2f);

	FileStorage fs;
	fs.open(filename, FileStorage::WRITE); //객체 쓰기 모드로 생성

	if (!fs.isOpened()) {
		cerr << "File open failed!" << endl;
		return;
	}

	//데이터 파일에 저장
	fs << "name" << name;
	fs << "age" << age;
	fs << "point" << pt1;
	fs << "scores" << scores;
	fs << "data" << mat1;

	//데이터 저장이 끝나면 파일을 닫는다
	fs.release();
}

코드가 실행되면 프로그램 실행 폴더에 mydata.json 파일이 생성되고, 생성된 파일에는 각각의 데이터가 저장되어 있다

차례대로 JSON, XML, YML 으로 저장한 데이터이다

 

쓰여진 데이터를 읽기 위해서는 READ 모드를 사용한다

void readData()
{
	//파일에 저장할 데이터 변수 선언
	String name;
	int age;
	Point pt1;
	vector<int> scores;
	Mat mat1;

	FileStorage fs(filename, FileStorage::READ); //객체 읽기 모드로 생성

	if (!fs.isOpened()) {
		cerr << "File open failed!" << endl;
		return;
	}

	//데이터를 읽음
	fs["name"] >> name;
	fs["age"] >> age;
	fs["point"] >> pt1;
	fs["scores"] >> scores;
	fs["data"] >> mat1;

	fs.release();

	cout << "name: " << name << endl;
	cout << "age: " << age << endl;
	cout << "point: " << pt1 << endl;
	cout << "scores: " << Mat(scores).t() << endl; //t()함수는 저장된 값을 간단하게 출력하기 위해 사용되는 코드
	cout << "data:\n" << mat1 << endl;
}

728x90