栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

日常bug记录(opencv VS eigen)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日常bug记录(opencv VS eigen)

项目场景:

因为项目上不能使用opencv开源库,所以自己用eigen重新写了一套角点检测的算法,实现对棋盘格靶标角点的检测,完成最终的产线标定。


问题描述

自己实现的角点检测算法和opencv版本的有所差异
亚像素处理的部分代码:

Eigen::EigenSolver eigen_solver1 ( A1 );
Eigen::EigenSolver eigen_solver2 ( A2 );
Eigen::Vector2f v1 = eigen_solver1.eigenvalues().real();
Eigen::Vector2f v2 = eigen_solver2.eigenvalues().real();
Eigen::Matrix2f foo1 = eigen_solver1.eigenvectors().real();
Eigen::Matrix2f foo2 = eigen_solver2.eigenvectors().real();

原因分析:

其实opencv和eigen在求解特征值方面,存在一些差异,opencv中会对特征值和特征向量按照从大到小的顺序进行排序,而eigen是随机的,所以在取对应的特征向量之前,在代码中需要对eigen得到的特征值进行大小判断,进而取得正确的特征向量。


解决方案:
Eigen::EigenSolver eigen_solver1 ( A1 );
Eigen::EigenSolver eigen_solver2 ( A2 );
Eigen::Vector2f v1 = eigen_solver1.eigenvalues().real();
Eigen::Vector2f v2 = eigen_solver2.eigenvalues().real();
Eigen::Matrix2f foo1 = eigen_solver1.eigenvectors().real();
Eigen::Matrix2f foo2 = eigen_solver2.eigenvectors().real();
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/767594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号