Как правильно экспортировать OpenCV Rect в XML-файл на Python? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть код, написанный на 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...