본문 바로가기

OpenCV

ch04 storage

#python code


import cv2
import numpy as np

# 파일 이름 설정
filename = "mydata.json"

def writeData():
    name = "Jane"
    age = 10
    pt1 = (100, 200)
    scores =np.array([80, 90, 50], dtype=np.int32)
    mat1 = np.array([[1.0, 1.5], [2.0, 3.2]], dtype=np.float32)

    fs = cv2.FileStorage(filename, cv2.FileStorage_WRITE)

    if not fs.isOpened():
        print("File open failed!")
        return

    fs.write("name", name)
    fs.write("age", age)
    fs.write("point", pt1)
    fs.write("scores", scores)
    fs.write("data", mat1)

    fs.release()

def readData():
    fs = cv2.FileStorage(filename, cv2.FileStorage_READ)

    if not fs.isOpened():
        print("File open failed!")
        return

    name = fs.getNode("name").string()
    age = int(fs.getNode("age").real())
    pt1 = tuple(fs.getNode("point").mat().astype(int).flatten())
    scores = fs.getNode("scores").mat().astype(int).flatten().tolist()
    mat1 = fs.getNode("data").mat()

    fs.release()

    print(f"name: {name}")
    print(f"age: {age}")
    print(f"point: {pt1}")
    print(f"scores: {scores}")
    print(f"data:\n{mat1}")

def main():
    writeData()
    readData()

if __name__ == "__main__":
    main()

// C++ code

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void writeData();
void readData();

// String filename = "mydata.xml";
// String filename = "mydata.yml";
String filename = "mydata.json";

int main(void)
{
	writeData();
	readData();

	return 0;
}

void writeData()
{
	String name = "Jane";
	int age = 10;
	Point pt1(100, 200);
	vector<int> scores = { 80, 90, 50 };
	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();
}

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;
	cout << "data:\n" << mat1 << endl;
}

C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저


name: Jane
age: 10
point: (100, 200)
scores: [80, 90, 50]
data:
[[1.  1.5]
 [2.  3.2]]

'OpenCV' 카테고리의 다른 글

ch04 trackbar  (0) 2024.05.19
ch04 trackbar  (0) 2024.05.19
ch04 mouse  (0) 2024.05.19
ch04 keyboard  (0) 2024.05.19
ch04 drawing  (0) 2024.05.19