Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用OpenCV绘制三维坐标轴以进行面部姿势估计?_Opencv_Image Processing_3d_Computer Vision_Camera Calibration - Fatal编程技术网

如何使用OpenCV绘制三维坐标轴以进行面部姿势估计?

如何使用OpenCV绘制三维坐标轴以进行面部姿势估计?,opencv,image-processing,3d,computer-vision,camera-calibration,Opencv,Image Processing,3d,Computer Vision,Camera Calibration,假设我现在得到了面欧拉角(俯仰、偏航、横摇)。如何绘制显示面部姿势的三维坐标轴 以下是来自以下网站的exmaple: 这可以在纯OpenCV中完成,只要您有相机参数。您应该能够创建与轴x、y、z相对应的三个矢量(基本上是点[0,0,0][1,0,0],[0,1,0],[0,0,1],稍后投影到图像平面中。您应该首先根据偏航/俯仰/滚动旋转这些点(例如,通过将它们乘以旋转矩阵) 要将3D点投影到图像平面,请使用该功能。该功能可获取3D点、相机参数并生成2D图像点。一旦获得图像点,您只需使用该功能在

假设我现在得到了面欧拉角(俯仰、偏航、横摇)。如何绘制显示面部姿势的三维坐标轴

以下是来自以下网站的exmaple:


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

要将3D点投影到图像平面,请使用该功能。该功能可获取3D点、相机参数并生成2D图像点。一旦获得图像点,您只需使用该功能在投影中心点之间绘制直线(3D中为[0,0,0])以及轴点的每个结果投影。

一个简单的示例:

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

为什么不直接从链接中获取代码?我不想使用OpenGL绘制结果。将3D轴创建为顶点/向量。对它们应用旋转。将它们投影到相机/图像平面否。阅读有关相机模型、计算机图形学、渲染管道、相机投影的内容。如果想要简单的方法,请使用OpenGL。如果不想,请学习并取消了解它是如何完成的(对于只投射简单的线来说不会太困难)-opencv有一些功能可以帮助你建立相机模型和变换顶点,但你必须了解你想做什么以及如何实现。-按照@Mika的建议去做。如果你不想使用OpenGL,那么你想做什么?你想使用opencv吗?我可以问一下你的例子中R、t和K是什么吗?@juerg on pag它们是摄像机矩阵的分解,X可以是任何3d旋转矩阵。