如何使用 OpenCV 绘制 3D 坐标轴进行面部姿态估计?

tid*_*idy 4 3d opencv image-processing computer-vision camera-calibration

假设我现在已经获得了面欧拉角(俯仰、偏航、滚动)。如何绘制显示面部姿势的 3D 坐标轴。

下面是来自〔实施例在这里

在此处输入图片说明

And*_*bis 7

只要您有相机参数,就可以在纯 OpenCV 中完成此操作。您应该能够创建对应于 x、y、z 轴的三个向量(基本上点 [0,0,0] [1, 0, 0], [0, 1, 0], [0, 0, 1] 其中您稍后将投影到图像平面中。您应该首先根据您的偏航/俯仰/滚动(例如,将它们乘以旋转矩阵)旋转这些点。

为了将 3D 点投影到图像平面,请使用projectPoints函数。它需要 3D 点、相机参数并生成 2D 图像点。获得图像点后,您可以简单地使用line函数在投影中心点(3D 中的 [0,0,0])和轴点的每个结果投影之间绘制线条。


小智 5

一个简单的例子:

def draw_axis(img, R, t, K):
    # unit is mm
    rotV, _ = cv2.Rodrigues(R)
    points = np.float32([[100, 0, 0], [0, 100, 0], [0, 0, 100], [0, 0, 0]]).reshape(-1, 3)
    axisPoints, _ = cv2.projectPoints(points, rotV, t, K, (0, 0, 0, 0))
    img = cv2.line(img, tuple(axisPoints[3].ravel()), tuple(axisPoints[0].ravel()), (255,0,0), 3)
    img = cv2.line(img, tuple(axisPoints[3].ravel()), tuple(axisPoints[1].ravel()), (0,255,0), 3)
    img = cv2.line(img, tuple(axisPoints[3].ravel()), tuple(axisPoints[2].ravel()), (0,0,255), 3)
    return img
Run Code Online (Sandbox Code Playgroud)

![]

  • 请问你的例子中的R,t和K是什么? (6认同)