У меня есть код, написанный на C ++ (назовем его программой A), который требует загрузки конфигурации в виде XML-файла.Я хочу иметь возможность создавать этот конфиг динамически из Python и вызывать программу A из скрипта Python.Все отлично работает, кроме одного поля в конфиге, который экспортируется cv::Rect
объект.
Упрощенный пример экспорта cv::Rect
, cv::Mat
и int
в файл xml с использованием OpenCV в C ++:
int i = 1;
cv::Mat m = cv::Mat::eye(3, 3, CV_64F);
cv::Rect r(100, 100, 1000, 1000);
cv::FileStorage f;
f.open("config.xml", cv::FileStorage::WRITE);
f << "Rect" << r;
f << "Mat" << m;
f << "Int" << i;
f.release();
, который создает config.xml
со следующей структурой:
<?xml version="1.0"?>
<opencv_storage>
<Rect>
100 100 1000 1000</Rect>
<Mat type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
1. 0. 0. 0. 1. 0. 0. 0. 1.</data></Mat>
<Int>1</Int>
</opencv_storage>
Теперь из Python я создаю новый файл конфигурации следующим образом:
r = (10, 10, 101, 101)
m = np.eye(3, dtype=float)
i = 1
fs = cv2.FileStorage("newConfig.xml", cv2.FILE_STORAGE_WRITE)
fs.write("Rect", r)
fs.write("Mat", m)
fs.write("Int", i)
fs.release()
, который создает XML-файл, который обрабатывает r как матрицу:
<?xml version="1.0"?>
<opencv_storage>
<Rect type_id="opencv-matrix">
<rows>4</rows>
<cols>1</cols>
<dt>d</dt>
<data>
10. 10. 101. 101.</data></Rect>
<Mat type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
1. 0. 0. 0. 1. 0. 0. 0. 1.</data></Mat>
<Int>1</Int>
</opencv_storage>
Что такоеправильный способ создания файла, совместимого с предыдущим в Python?