作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个3x3的相机旋转矩阵,然后我使用Rodrigues
函数从旋转矩阵获取旋转 vector ,但是它给出的结果类似于rotVec = (0.02,0.32.-0.01)
,但是OpenGL glRotate
函数需要度数。我认为rotVec = (0.02,0.32.-0.01)
是规范化的,我应该将每个元素乘以360以得到度。但是在OpenCV和OpenGL之间也存在坐标系统差异。如何在OpenGL坐标系中获得以度为单位的旋转 vector ?
最佳答案
OpenCV和OpenGL使用不同的3D坐标系和不同的内存中矩阵表示形式。 OpenGL矩阵以列优先顺序存储在内存中。例如:
m[0] m[4] m[8] m[12]=tx
m[1] m[5] m[9] m[13]=ty
m[2] m[6] m[10] m[14]=tz
m[3]=0 m[7]=0 m[11]=0 m[15]=1
m[0] m[1] m[2] m[3]=tx
m[4] m[5] m[6] m[7]=ty
m[8] m[9] m[10] m[11]=tz
m[12]=0 m[13]=0 m[14]=0 m[15]=1
cv::Mat::t()
运算符)进行转换。
cv::Matx33
),不如将其填充为零平移将其转换为
cv::Matx44
,并使用
glMultMatrix(xform.t().val)
直接与OpenGL MODELVIEW转换连接。 (
t()
创建转置,而
.val
是指向16个浮点的转置数组的指针。)
关于c++ - 如何将OpenCV摄像机旋转 vector 转换为OpenGL旋转 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219595/
我是一名优秀的程序员,十分优秀!