Opencv:当使用运算符<<保存为原始数据时,将数据从文件读取到矩阵
Posted
技术标签:
【中文标题】Opencv:当使用运算符<<保存为原始数据时,将数据从文件读取到矩阵【英文标题】:Opencv: read data from file to a matrix, when saved as raw using operator << 【发布时间】:2015-04-30 15:19:54 【问题描述】:使用 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)
【问题讨论】:
有什么理由不能使用 YAML 文件?你想要的听起来几乎和 YAML 提供的一样(YAML 文件实际上只是一个具有矩阵尺寸和类型的文本文件) @alrikai 不是真的,只是我希望有一个“反向”运算符,与 two questions 会有所帮助。 【参考方案1】:1.您可以在link1 中像这里一样继续,他试图在他的垫子之间分开,自己检查一下,也许您的问题是如何存储您的数据而不是如何阅读它!
2.或者尝试使用“文件存储”并将您的文件保存为 XML/YML,如link2 中所建议的那样
【讨论】:
谢谢。 1 -your problem is how to stock your data
:不,我想要的是读取数据,就像我在文件中写入数据一样简单:f << m;
2 - 是的,我知道,我只是想看看是否有办法避免它.以上是关于Opencv:当使用运算符<<保存为原始数据时,将数据从文件读取到矩阵的主要内容,如果未能解决你的问题,请参考以下文章