Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从std::vector转换<;cv::Mat>;无需重新分配的本征张量_C++_Opencv_C++11_Vector_Eigen - Fatal编程技术网

C++ 从std::vector转换<;cv::Mat>;无需重新分配的本征张量

C++ 从std::vector转换<;cv::Mat>;无需重新分配的本征张量,c++,opencv,c++11,vector,eigen,C++,Opencv,C++11,Vector,Eigen,我有一个std::vector,它表示x、y、z维的体素。向量中的每个cv::Mat都是体积的横截面或切片 不幸的是,OpenCV没有为这种数据类型提供任何包装器,所以我决定使用Eigen库中不支持的模块Tensor。我在文档中看不到任何构造函数可以让我在不需要重新分配数据的情况下有效地从向量转换为特征::张量 从std::vector转换为Eigen::Tensor最有效的方法是什么?并解释了为什么不重新分配它就不能工作。@AviGinsburg您链接的问题确实有一个有效的解决方案:假设OP没

我有一个
std::vector
,它表示x、y、z维的体素。向量中的每个
cv::Mat
都是体积的横截面或切片

不幸的是,OpenCV没有为这种数据类型提供任何包装器,所以我决定使用Eigen库中不支持的模块Tensor。我在文档中看不到任何构造函数可以让我在不需要重新分配数据的情况下有效地从
向量转换为
特征::张量


std::vector
转换为
Eigen::Tensor
最有效的方法是什么?

并解释了为什么不重新分配它就不能工作。@AviGinsburg您链接的问题确实有一个有效的解决方案:假设OP没有指定“转换向量的向量以便Eigen可以使用它”的意思稀疏矩阵就可以了(您可以将稀疏矩阵映射到向量向量向量,而无需重新定位)。也就是说,我不认为Eigen支持稀疏张量……你可以阅读cv::MatAllocator和Eigen::TensorMap;我自己从未使用过它们,但看起来可以使用前者连续分配每个mat数据,使用后者将结果数据映射到张量表达式,而无需重新分配……默认情况下,cv::mat::data是以连续方式分配的。问题是cv::Mats向量中的::数据不连续,因为它与cv::Mat类数据隔开。@MaxWalczak否,这与向量无关,而是将所有Mat的内存连续存储在单个块中,以便传递给张量。。。因此,您需要一个特殊的MatAllocator(请记住,cv::Mat是动态分配的,向量只是指针对数组,或其他等价物),并解释了为什么不重新分配它就无法工作。@AviGinsburg您链接的问题确实有一个有效的解决方案:假设OP没有指定他所指的内容“转换向量的向量,以便Eigen可以使用它”稀疏矩阵即可(您可以将稀疏矩阵映射到向量向量,而无需重新定位).也就是说,我认为Egeng不支持稀疏张量…您可以阅读cv::MatAllocator和Egeng::TensorMap;我自己从未使用过它们,但看起来您可以使用前者连续分配每个mat数据,后者将结果数据映射到张量表达式,而无需重新分配…cv::mat::data以连续的方式分配默认情况下是这样。问题是cv::Mats向量中的::数据不是连续的,因为它与cv::Mat类数据隔开。@MaxWalczak否,这与向量无关,而是将所有Mat的内存连续存储在单个块中,以便传递给张量……因此,您需要一个特殊的Mat分配器(请记住,cv::Mat是动态分配的,向量只是指针对的数组,或者是等效的东西)