gpt4 book ai didi

c++ - 将 vector 转换为大小为 (n x 3) 的 Mat,反之亦然

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:37 43 4
gpt4 key购买 nike

我有 Point3d( vector ) vector 形式的点云。如果我使用 OpenCV 提供的转换,比如

cv::Mat tmpMat = cv::Mat(pts) //Here pts is vector<cv::Point3d>

它被转换为具有 3 个 channel 的矩阵。我想要一个尺寸为 nx3 的单 channel 矩阵(n - vector 中的元素数)。有什么直接的方法可以将 Point3d 的 vector 转换为大小为 nx3 的 OpenCV Mat?

现在我在做

cv::Mat1f tmpMat = cv::Mat::zeros(pts.size(), 3, cv::CV_32FC1);
for(int i = 0; i< pts.size(); ++i)
{
tmpMat(i, 0) = pts[i].x;
tmpMat(i, 1) = pts[i].y;
tmpMat(i, 2) = pts[i].z;
}

从Mat到Point3d的 vector

vector<cv::Point3d> pts;
for (int i = 0; i < tmpMat.rows; ++i)
{
pts.push_back(cv::Point3d(tmpMat(i, 0), tmpMat(i, 1), tmpMat(i, 2));
}

我会反复这样做。有没有更快的方法?

最佳答案

找到了将 3 Channel Mat 转换为大小为 (nx3) 的单个 Channel Mat 的方法

http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat-reshape

cv::Mat tmpMat = cv::Mat(pts).reshape(1);

将大小为 nx3 的 Mat 转换为 vector

vector<cv::Point3d> pts;
tmpMat.reshape(3, tmpMat.rows*tmpMat.cols).copyTo(pts);

vector 的大小将等于 Mat 的行数

关于c++ - 将 vector<Point3d> 转换为大小为 (n x 3) 的 Mat,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45860306/

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