c++ - Opencv:使用运算符<<将数据保存为原始数据时,将数据从文件读取到矩阵

标签 c++ opencv matrix

使用 OpenCv,将数据从 cv::Mat 保存到原始文本文件非常容易:

cv::Mat m( 10, 10,CV_8UC1 );
// ... fill with values
std::ofstream f( "mydata.txt" );
f << m;

这会产生一个简单的布局,比如说 int 的布局:

[1, 2, 3, .... ;
 4, 5, 6, .... ;
 ...
 7, 8, 9, ... ]

我的问题是:以这种方式保存时,如何读回数据(假设您知道矩阵的大小和类型)。 这会很棒:

cv::Mat m( 10, 10,CV_8UC1 );
std::ifstream f( "mydata.txt" );
f >> m;

但遗憾的是它无法编译。我真的必须通过 getline() 和所有相关的检查、标记化……才能做到这一点吗? (我的意思是,除了使用 YAML/XML as described here )。 Opencv 是否提供了一些更简单的语法?

如果您喜欢模板错误消息,这里是它们:

error: cannot bind ‘std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>&&’
infile >> mymat;
          ^
error:   initializing argument 1 of ‘std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = cv::Mat]’
 operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)

最佳答案

1.你可以在这个link1中像这里一样继续,他试图在他的 Mat 的 cols 之间分开,自己检查一下,也许你的问题是如何储存你的数据而不是如何阅读它!

2.或者尝试使用“文件存储”并将您的文件保存为 XML/YML,如本 link2 中所建议的那样

关于c++ - Opencv:使用运算符<<将数据保存为原始数据时,将数据从文件读取到矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971585/

相关文章:

python - 从阈值图像opencv python中去除噪声

python - 具有边缘畸变和 1 个缺失角的方形检测

python - 为什么cv2.resize()对整数数组不起作用?

python-3.x - 逐列特定值计数

python - tensorflow 中的矩阵减法类似于矩阵乘法

c++ - 在 64 位 Excel 中调用 C DLL 以在 VBA 中使用

C++指针 vector <base_class*>放置派生类但切片打印

c++ - OpenGL 矩阵和着色器混淆

c++ - 强制 auto 成为循环范围内的引用类型

c++ - 函数的 try-catch 语法之间的区别