- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试返回类型为 Eigen::MatrixXf
的值,但这会导致段错误。尝试调试时,我发现如果返回类型是 float
或 int
之类的,并且函数中有相应的返回值,则函数运行成功。我已经尝试从 here 的 Eigen 文档中诊断问题, 但没有任何帮助。
MatrixXf& create_V_matrix(cv::Mat H) {
// Gather V matrix
MatrixXf v11 = get_vij_matrix(H, 0, 0);
MatrixXf v12 = get_vij_matrix(H, 0, 1);
MatrixXf v22 = get_vij_matrix(H, 1, 1);
MatrixXf V;
V << v12.transpose(),
(v11-v12).transpose();
return V;
}
MatrixXf get_vij_matrix(cv::Mat H, int i, int j) {
// Create v matrix at i and j
MatrixXf vij;
vij << H.at<float>(0, i)*H.at<float>(0, j),
H.at<float>(0, 1)*H.at<float>(1, j) +
H.at<float>(1, i)*H.at<float>(0, j),
H.at<float>(1, i)*H.at<float>(1, j),
H.at<float>(2, i)*H.at<float>(0, j) +
H.at<float>(0, i)*H.at<float>(2, j),
H.at<float>(2, i)*H.at<float>(1, j) +
H.at<float>(1, i)*H.at<float>(2, j),
H.at<float>(2, i)*H.at<float>(2, j);
return vij;
}
这会导致 Segmentation fault(core dumped)
当 create_V_matrix(cv::Mat H
)被称为。
最佳答案
在你的函数中 et_vij_matrix
, 你需要设置 MatrixXf
的大小vij
使用前 operator <<
赋值。否则,为 vij
分配的存储空间大小为零,您的作业将越界。我计算了 6 个您要分配的值,所以 vij.resize(1,6)
, vij.resize(2,3)
, vij.resize(3,2)
, 或 vij.resize(6,1)
在作业之前是必需的。
同样,您的矩阵 V
在分配来自 v11
的值之前未调整大小& v12
.
最后,如PeterT所述, 你是 create_V_matrix
返回 MatrixXf&
引用局部变量,这是未定义的行为。虽然它可能有效,但不是必需的。看这个Q&A一个很好的解释。如果您担心拷贝,您可以而且应该依靠 RVO/拷贝省略来删除无意义的拷贝。
关于c++ - 使用 Eigen::MatrixXf 作为函数返回类型时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58041557/
有时 ago用户 ggael 给出了答案将 eigen::vectorXf 映射到 eigen::matrixXf 的问题。 现在,我需要做一些类似的事情,但要针对现有矩阵,例如,我知道我可以: fo
我有一个用DLL编写的C++,我需要从Rust程序中调用一个名为print_matrix(Eigen::MatrixXf *m)的函数。 我创建了一个4x3的Mactrix,所讨论的函数将指针作为其输
我正在通过与此类似的代码将相对较大的 MatrixXf 序列化到文件 -- https://github.com/github188/vidy_old/blob/01c0aa4242299f7f105
我只是玩了一下 Eigen,注意到 MatrixXf::Random(3,3) 总是返回相同的矩阵,例如第一个总是这样: 0.680375 0.59688 -0.329554 -0.211234 0.
在 Eigen 中,i need将 MatrixXf 放置到现有数组中。现在,这有效: MatrixXf Um=FFMatBas(xi,CalcMetod); MapUv(Um.dat
我正在尝试创建一个 boost::lockfree::queue 下面的例子:http://www.boost.org/doc/libs/1_54_0/doc/html/lockfree/exampl
我正在尝试返回类型为 Eigen::MatrixXf 的值,但这会导致段错误。尝试调试时,我发现如果返回类型是 float 或 int 之类的,并且函数中有相应的返回值,则函数运行成功。我已经尝试从
为什么下面的代码编译不通过? library(Rcpp) cppFunction(' int rows(const NumericMatrix& X) { using Eige
我正在尝试维护一个引用 Eigen::MatrixXf 跨保守调整大小的第一列的变量。 ColXpr c 看起来在 MatrixXf m 调整大小时无法重新分配时无效。我可以看到这如何保护我免受错误,
我是 Eigen 库的新手。我想计算特征矩阵的 FFT。但是,我这样做的尝试表明不受支持的 Eigen FFT 模块不能与 MatrixXf 一起使用。我想完成类似的事情: #include #in
我正在使用 Eigen在 C++ 程序上。 我想知道是否有办法从 Eigen::MatrixXd 转换至Eigen::MatrixXf . static_cast 似乎不起作用,A.cast (这是
如果x是 float 的非特征向量,我可以将它映射到 eigen::MatrixXf通过: MatrixXf x_cen=Map(*x,*n,*p); 然后,对 x_cen 的修改将被报告给x也因为他
我有这个代码: #include "opencv2/core.hpp" #include "opencv2/core/eigen.hpp" #include void CloudCache::DoP
我是一名优秀的程序员,十分优秀!