EcvFixtureNPointToNPoint [0.005449361982544792, -0.1289544774881132, 530.0837876296085; -0.123088213223563, -0.002015440037982963, 176.467908864676; 1.253816550699704e-05, -1.409435626221866e-05, 1] EcvFixtureNPointToNPoint_inv [-0.03009568838103567, -7.646903033311, 1365.302490540285; -7.88780373726641, 0.07505309262523116, 4167.793913217173; -0.0001113053927464202, 9.675633262288492e-05, 1] // 重载流运算符 friend std::ostream& operator<<(std::ostream& os, const IM_Image& params) { // 序列化各个字段 /*os << params.Barcode.toStdString() << std::endl; os << params.ID << std::endl; os <<params.image << std::endl;*/ QList<QString> keys = params.TransformationMatrix.keys(); QList<cv::Mat> values = params.TransformationMatrix.values(); for (size_t i = 0; i < keys.size(); i++) { os << keys[i].toStdString() << std::endl;; // 将QString转为std::string后输出 os << values[i] << std::endl; // 直接输出cv::Mat对象 } return os; } friend std::istream& operator>>(std::istream& is, IM_Image& params) { std::string str; is >> str; cv::Mat temp; is >> temp; return is; } 利用输出流取出数据
时间: 2024-03-06 11:51:44 浏览: 70
根据您提供的代码,您应该将 "TransformationMatrix" 中的数据序列化输出到输出流中。因此,您可以使用以下代码将数据从输入流中读取并存储到 "TransformationMatrix" 中:
```
friend std::istream& operator>>(std::istream& is, IM_Image& params)
{
std::string str;
cv::Mat temp;
while (is >> str) // 循环读取每一行的数据
{
is >> temp; // 读取当前行的数据
params.TransformationMatrix[str.c_str()] = temp; // 将数据存储到 TransformationMatrix 中
}
return is;
}
```
在此代码中,我们首先定义了一个字符串变量 "str" 和一个 cv::Mat 变量 "temp",然后使用一个 while 循环来读取输入流中的每一行数据。在每一行数据中,我们首先读取一个字符串,然后读取一个 cv::Mat 对象。最后,我们将读取的数据存储到 "TransformationMatrix" 中,并返回输入流。需要注意的是,在将字符串转换为 "char*" 类型时,我们使用了 "c_str()" 函数。
请注意,在您的代码中,由于注释掉了部分代码,因此无法确定如何正确序列化 "IM_Image" 类型的数据。如果您需要更多帮助,请提供更多细节信息。
阅读全文