gpt4 book ai didi

c++ - 将 std::string 转换回用 std::stringstream << cv::Mat 生成的 cv::Mat

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:48 57 4
gpt4 key购买 nike

我正在以一种特殊的数据格式保存立体视觉的校准数据,而不是 opencv 给定的 YAML 数据结构,这让我更加灵活。

因此,我使用了一些技巧将 cv::Mat 转换为 std::string:

cv::Mat mat;
// some code
std::stringstream sstrMat;
sstrMat << mat;
saveFoo(sstrMat.str()); // something like this to save the matrix

作为输出,我从 sstrMat.str() 得到我需要的所有数据:

[2316.74172937253, 0, 418.0432610206069;
0, 2316.74172937253, 253.5597342849773;
0, 0, 1]

我的问题是它的逆向操作:将这个 std::string 转换回 cv::Mat。

我试过这样的代码:

cv::Mat mat;
std::stringstream sstrStr;
sstrStr << getFoo() // something like this to get the saved matrix

sstrStr >> mat; // idea-1: generate compile error
mat << sstrStr; // idea-2: does also generate compile error

我的所有尝试都失败了,所以我会问你是否知道 opencv 的方法来将那个字符串转换回来,或者我是否编写了自己的方法来做到这一点。

最佳答案

您是否实现了 operator<<(std::ostream&, const Mat&)你自己 ?如果是这样,您显然也必须自己进行反向操作,如果您愿意的话。

根据你的输出,我猜矩阵的类型是 CV_64F有 3 个 channel 。请务必记住矩阵的大小,并检查 documentation .

您可以使用这些规范创建矩阵,并在读取流时用值填充它。互联网上有多个流式阅读示例,但在您的情况下这很容易。使用 [ ] , ; 忽略不需要的字符 ( std::istream::read )进入虚拟缓冲区,并使用 operator>>(std::istream&, double)恢复您的值(value)观。

它的酷之处在于您可以遍历 cv::Mat就像您在标准库容器上一样。因此,如果您使用的是 C++11,它可能看起来像这样(未测试):

int size[2] = {x, y}; // matrix cols and rows
cv::Mat mat(3, size, CV_F64); // 3-dimensional matrix

for(auto& elem : mat)
{
cv::Vec3d new_elem; // a 3D vector with double values
// read your 3 doubles into new_elem
// ...

elem = new_elem; // assign the new value to the matrix element
}

同样,我没有广泛使用 OpenCV,因此请参阅文档以检查一切是否正确。

关于c++ - 将 std::string 转换回用 std::stringstream << cv::Mat 生成的 cv::Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076934/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com