C++ 我可以将向量强制转换为OpenCv矩阵吗?

C++ 我可以将向量强制转换为OpenCv矩阵吗?,c++,opencv,pointers,vector,casting,C++,Opencv,Pointers,Vector,Casting,我想直接使用OpenCVs矩阵函数对向量对象进行操作 我目前正在做的是使用memcpy将数据复制到一个矩阵,但我真的很想直接操作它,因为我非常关心性能。以下是我当前的实现,它按预期工作 工作执行 此操作的输出是一个分号流。我认为它可能需要重新塑造,但我得到一个错误,它不是连续的。您没有发布navstack\u msgs::location的定义,因此很难说您所要求的是否合理 OpenCV为“借用”(即非自有)内存提供了一组(4)构造函数: 现在,每行都有路径中一个元素的数据 但在这里,您必须假设

我想直接使用OpenCVs矩阵函数对向量对象进行操作

我目前正在做的是使用memcpy将数据复制到一个矩阵,但我真的很想直接操作它,因为我非常关心性能。以下是我当前的实现,它按预期工作

工作执行
此操作的输出是一个分号流。我认为它可能需要重新塑造,但我得到一个错误,它不是连续的。

您没有发布
navstack\u msgs::location
的定义,因此很难说您所要求的是否合理

OpenCV为“借用”(即非自有)内存提供了一组(4)构造函数:

现在,每行都有
路径中一个元素的数据

但在这里,您必须假设将
T
解释为
uchar
s序列是有意义的。如果您认为
T
是一堆
double
s(例如,一个POD:
struct{double x;double y;};
)。那你就可以了

cv::Mat mat(path.size(), sizeof(T) / 8, CV_64F, path.data());

但是如果
T
有其他东西,或者如果它有指针(例如
typedef std::vector T
),那么你将无法通过
cv::Mat
查看它,因为你没有发布
navstack\u msgs::location
的定义,所以很难说你所要求的是否合理

OpenCV为“借用”(即非自有)内存提供了一组(4)构造函数:

现在,每行都有
路径中一个元素的数据

但在这里,您必须假设将
T
解释为
uchar
s序列是有意义的。如果您认为
T
是一堆
double
s(例如,一个POD:
struct{double x;double y;};
)。那你就可以了

cv::Mat mat(path.size(), sizeof(T) / 8, CV_64F, path.data());

但是如果
T
有其他东西,或者它有指针(例如
typedef std::vector T
),那么您将无法通过
cv::Mat

查看它,所以可能性很小。它们不是都是连续的数据类型吗?我认为既然memcpy可以工作,那么我应该能够按照自己的意愿转换数据。我的逻辑中有缺陷吗?想想看,
vector
通常只是几个指针,指向分配给
vector
的数据,因此您将指针投射到数据,而不是数据,指向
mat
。克罗姆只知道你走过的是谁的记忆。我知道记忆区域的大小,因为我是。我想我应该能够投射它。
vector
数据是连续的。不幸的是,
vector
数据在这里。。。向量本身就在那里的某个地方。不管怎样,你是在违反法律。请阅读有关类型别名的部分。所以可能性很小。它们不是都是连续的数据类型吗?我认为既然memcpy可以工作,那么我应该能够按照自己的意愿转换数据。我的逻辑中有缺陷吗?想想看,
vector
通常只是几个指针,指向分配给
vector
的数据,因此您将指针投射到数据,而不是数据,指向
mat
。克罗姆只知道你走过的是谁的记忆。我知道记忆区域的大小,因为我是。我想我应该能够投射它。
vector
数据是连续的。不幸的是,
vector
数据在这里。。。向量本身就在那里的某个地方。不管怎样,你是在违反法律。请阅读有关类型别名的部分。谢谢。我会在早上试一试,如果成功,我会记下我的答案。我等不及了。是的,这个有效。感谢您没有抱怨并提供解决方案。谢谢。我会在早上试一试,如果成功,我会记下我的答案。我等不及了。是的,这个有效。感谢您没有抱怨并提供了解决方案。
Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP)

Mat (Size size, int type, void *data, size_t step=AUTO_STEP)

Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0)

Mat (const std::vector< int > &sizes, int type, void *data, const size_t *steps=0)
std::vector<T> path;
cv::Mat mat(path.size(), sizeof(T), CV_8U, path.data());
cv::Mat mat(path.size(), sizeof(T) / 8, CV_64F, path.data());