opencv 中的矩阵如何以 csv 格式输出
我要将一个类型位 cv::Mat
的矩阵导出到文件, 然后在 python
脚本中导入, 但是使用 <<
操作符, 输出的形式如下(这里以(3, 3)
的全1矩阵为例):
测试代码如下:
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
int main(int argc, char const *argv[])
{
cv::Mat m = cv::Mat::ones(3,3, CV_32S);
std::cout << "default:" << std::endl << m << std::endl;
return 0;
}
默认格式输出的文本导入到 python
脚本中, 需要对文本做额外的处理, 太麻烦了! 有没有简单的方法呢? 如果能直接以csv
格式输出岂不美哉?!
我们可以使用OpenCV
中的Formatter::format()
函数轻松做到这一点. 示例代码如下:
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
int main(int argc, char const *argv[])
{
cv::Mat m = cv::Mat::ones(3,3, CV_32S);
std::ofstream fs("m.csv");
auto fmt = cv::Formatter::get(cv::Formatter::FMT_CSV);
fs << fmt->format(m) << std::endl;
fs.close();
std::cout << "csv :" << std::endl << fmt->format(m) << std::endl;
return 0;
}
到此, python
就可以 轻松导入矩阵了
import numpy as np
m = np.loadtxt('./m.csv', delimiter=',', dtype=np.int32)
print(m)