我需要打印一个OpenCV矩阵,之前我不知道它的类型。由于我使用.at函数遍历循环中的所有条目,因此我需要从矩阵类型到C ++数据类型的映射。但是我不想检查每个案例(CV_8UC1 ...... CV_64FC4)。
我可以将矩阵转换为类似的已知数据类型,并且只使用myMatrix.at读取矩阵吗?
以下是代码:
fstream << vecMat[0].rows<<" "<<vecMat[0].cols<<" "<<vecMat.size()<<" \n";
// Print 3d matrix as a 2d matrix
for(int x=0; x < vecMat[0].rows; x++)
{
for(int z=0; z < vecMat.size(); z++)
{
for(int y=0; y < vecMat[0].cols; y++)
{
fstream << vecMat[z].at<UNKNOWN_DATA_TYPE>(x,y)<<" ";
}
}
fstream<<" \n";
}
编辑: format(R,&#34; csv&#34;)没有帮助,因为我需要用空格而不是用逗号分隔矩阵字段。这使我更容易在使用中读取矩阵,例如
fstream >> vecMat[z].at<double>(x,y);
答案 0 :(得分:4)
<<
本地为mat
类型重载,您可以指定其格式以更改其外观。例如(其中R
为mat
):
cout << "R (numpy) = " << endl << format(R,"numpy" ) << endl << endl;
可以使用这些格式的完整列表here。