使用 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/