相关疑难解决方法(0)

OpenCV CV :: Mat和Eigen :: Matrix

是否有可逆的方式将OpenCV cv::Mat对象转换为Eigen::Matrix

例如,某种做法:

cv::Mat cvMat;
Eigen::Matrix eigMat;
camera->retrieve(cvMat);

// magic to convert cvMat to eigMat
// work on eigMat
// convert eigMat back to cvMat

imshow("Image", cvMat);
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用cv2eigeneigen2cv,但由此产生的cvMat完全是错位的,我不知道是什么原因.尺寸是正确的,但图形完全被破坏,所以可能是每像素字节或数据大小问题?

opencv eigen

27
推荐指数
3
解决办法
3万
查看次数

cv :: Mat转换为Eigen-Matrix并返回

我有几个存储在cv::Matwhere中的特征向量,每一行都是一个特征向量(这里有几行像这样:) [ x1 y1 x2 y2 x3 y3.... ].我必须在每个特征向量上应用SVD,为此我使用特征库.但是,在应用SVD之前,必须将特征矩阵转换为Eigen::Matrix形式.

后来,我必须将SVD结果转换回来cv::Mat.

任何人都可以建议一个很好的方法来做到这一点?我在cv::Mat表单中需要它的原因是因为我必须在OpenCV中将其输入到神经网络,并且只cv::Mat允许输入矩阵.

谢谢!!!

c++ opencv eigen eigen3

2
推荐指数
2
解决办法
2万
查看次数

为什么这个matlab和C++代码产生不同的结果?

+我正在尝试用C++实现matlab算法.

这是matlab代码:

p = 3;
K = [3 4 5; 4 5 6; 7 8 9];
e = ones(p,1);
K2 = K - (1/p)*K*ones(p) - 1/p + (1/p^2)*sum(K(:))
[V_K,D_K] = eig(K2);
Run Code Online (Sandbox Code Playgroud)

虽然这是使用OpenCV的类似C++代码:

float data[] = {3, 4, 5,
                4, 5, 6,
                7, 8, 9};
cv::Mat m(3, 3, CV_32F, data);
float p = K.rows;
cv::Mat CK = K - (1/p)*K*cv::Mat::ones(p,p,CV_32F) - 1/p + (1/std::pow(p,2))*cv::sum(K)[0];
cv::Mat eigenvalues(1,p,CK.type()), eigenvectors(p,p,CK.type());
cv::eigen(CK,eigenvalues,eigenvectors);
Run Code Online (Sandbox Code Playgroud)

matlab代码打印:

CK =

4.3333    5.3333    6.3333
4.3333    5.3333    6.3333
4.3333    5.3333    6.3333

0.5774 …
Run Code Online (Sandbox Code Playgroud)

c++ matlab opencv

1
推荐指数
1
解决办法
330
查看次数

标签 统计

opencv ×3

c++ ×2

eigen ×2

eigen3 ×1

matlab ×1