opencv 2点 三维点 直线
时间: 2023-10-07 12:14:14 浏览: 55
如果您想要使用 OpenCV 进行 2D 和 3D 点的操作,可以使用以下代码:
```python
import cv2
import numpy as np
# 2D 点
pt_2d = (100, 200)
# 3D 点
pt_3d = (100, 200, 50)
# 绘制 2D 点
img = np.zeros((512, 512, 3), np.uint8)
cv2.circle(img, pt_2d, 5, (0, 0, 255), -1)
# 绘制 3D 点
K = np.array([[500, 0, 256], [0, 500, 256], [0, 0, 1]])
dist = np.array([0.1, 0.2, -0.1, 0.5, 0.2])
rvec = np.array([0.1, -0.2, 0.3])
tvec = np.array([50, 100, 200])
pts_3d = np.array([pt_3d], dtype=np.float32)
pts_2d, _ = cv2.projectPoints(pts_3d, rvec, tvec, K, dist)
cv2.circle(img, tuple(pts_2d[0].astype(int).ravel()), 5, (0, 255, 0), -1)
# 绘制直线
cv2.line(img, (50, 50), (450, 450), (255, 0, 0), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个代码中,我们首先定义了一个 2D 点 `pt_2d` 和一个 3D 点 `pt_3d`,然后使用 `cv2.circle()` 函数在 `img` 图像上绘制了这两个点。
接着,我们定义了相机内参矩阵 `K`、畸变系数 `dist`、旋转向量 `rvec` 和平移向量 `tvec`,以及一个由 `pt_3d` 构成的 3D 点数组 `pts_3d`。然后,使用 `cv2.projectPoints()` 函数将 `pts_3d` 投影到相机坐标系下,并将得到的 2D 点 `pts_2d` 绘制在 `img` 图像上。
最后,我们使用 `cv2.line()` 函数在 `img` 图像上绘制了一条直线。