将 Mat 元素 (uchar) 写入 .csv
Writing Mat elements (uchar) to .csv
我想将 Mat 对象 (OpenCV uchar) 的内容输出到 .csv 文件。
现在,我可以写整数和双精度数,甚至(看起来)uchars,但是在 Excel 中打开 csv 时,uchar 被解释为字符,所以我无法检查值.所以我试图在将它们保存到 csv 之前将它们转换为字符串,但失败了。
到目前为止我的代码:
Ofstream Datalogger(path);
// Some code
for (int i = 0; i< vector1.size();i++)
{
Datalogger << i << ";"
<< vector1[i].someint << ";"
<< vector1[i].somedouble << ";"
const uchar* Mi = Mat1.ptr<uchar>(i);
for(int k = 0; k < Mat1.cols; k++)
{
std::string descr( Mi[k]);
Datalogger << descr << ";" ;
}
Datalogger << endl;
}
但是错误代码是:
1 IntelliSense: no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]" matches the argument list argument types are: (const uchar)
这可能意味着字符串 descr() 不能接受 uchars。
知道如何将内容记录到 .csv 并能够看到 uchar 的数值而不是被 Excel 解释为特殊字符吗?
好吧,因为真的不需要字符串,只需要能够读取 Excel 中的数值,我只是做了一个 int 的转换。
for (int i = 0; i< vector1.size();i++)
{
Datalogger << i << ";"
<< vector1[i].someint << ";"
<< vector1[i].somedouble << ";"
const uchar* Mi = Mat1.ptr<uchar>(i);
for(int k = 0; k < Mat1.cols; k++)
{
int descr = int( Mi[k]);
Datalogger << descr << ";" ;
}
Datalogger << endl;
}
cv::format() 也可能有用:
cv::Mat M = cv::Mat::ones(3, 3, CV_8UC3);
std::cout << cv::format(M, "csv") << std::endl;
还有一些其他选项可以print/format输出:
http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html#output-formatting
我想将 Mat 对象 (OpenCV uchar) 的内容输出到 .csv 文件。
现在,我可以写整数和双精度数,甚至(看起来)uchars,但是在 Excel 中打开 csv 时,uchar 被解释为字符,所以我无法检查值.所以我试图在将它们保存到 csv 之前将它们转换为字符串,但失败了。
到目前为止我的代码:
Ofstream Datalogger(path);
// Some code
for (int i = 0; i< vector1.size();i++)
{
Datalogger << i << ";"
<< vector1[i].someint << ";"
<< vector1[i].somedouble << ";"
const uchar* Mi = Mat1.ptr<uchar>(i);
for(int k = 0; k < Mat1.cols; k++)
{
std::string descr( Mi[k]);
Datalogger << descr << ";" ;
}
Datalogger << endl;
}
但是错误代码是:
1 IntelliSense: no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]" matches the argument list argument types are: (const uchar)
这可能意味着字符串 descr() 不能接受 uchars。
知道如何将内容记录到 .csv 并能够看到 uchar 的数值而不是被 Excel 解释为特殊字符吗?
好吧,因为真的不需要字符串,只需要能够读取 Excel 中的数值,我只是做了一个 int 的转换。
for (int i = 0; i< vector1.size();i++)
{
Datalogger << i << ";"
<< vector1[i].someint << ";"
<< vector1[i].somedouble << ";"
const uchar* Mi = Mat1.ptr<uchar>(i);
for(int k = 0; k < Mat1.cols; k++)
{
int descr = int( Mi[k]);
Datalogger << descr << ";" ;
}
Datalogger << endl;
}
cv::format() 也可能有用:
cv::Mat M = cv::Mat::ones(3, 3, CV_8UC3);
std::cout << cv::format(M, "csv") << std::endl;
还有一些其他选项可以print/format输出:
http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html#output-formatting