ubuntu下面opencv标定内参
时间: 2025-06-03 11:43:17 浏览: 9
### 使用 OpenCV 在 Ubuntu 上进行相机内参标定
为了在 Ubuntu 上使用 OpenCV 进行相机内参标定,可以采用 Python 编程语言配合 OpenCV 库来实现这一目标。具体过程涉及准备棋盘格图像、编写用于检测角点并计算内外参数的脚本。
#### 准备工作环境
确保已经安装了必要的软件包,包括但不限于 `opencv-python` 和 `numpy`。可以通过 pip 安装这些依赖项:
```bash
pip install opencv-python-headless numpy
```
对于特定版本的需求,如文中提到的操作系统和库版本组合 (Ubuntu 16.04, Python 3.5.2, OpenCV 3.2.0),建议创建虚拟环境以隔离项目依赖[^1]。
#### 获取校准图片集
收集一组不同角度拍摄的棋盘图案照片作为训练数据源。理想情况下,应该覆盖尽可能多的方向变化以便获得更精确的结果。
#### 实现相机标定算法
下面是一个简单的例子展示如何利用 OpenCV 的函数来进行相机内部参数估计:
```python
import cv2
import glob
import numpy as np
# 设置查找亚像素角点的终止条件
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# 棋盘格尺寸(宽度方向上的方块数, 高度方向上的方块数)
chessboard_size = (9, 6)
# 创建存储空间保存世界坐标系下的三维点和平面图中的二维投影位置
objp = np.zeros((np.prod(chessboard_size), 3), dtype=np.float32)
objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)*20 # 假设每边长度为20mm
object_points = [] # 存储所有图像的世界坐标系下对象点
image_points = [] # 对应于上述对象点在同一幅图像内的平面坐标
images = glob.glob('calibration_images/*.jpg')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)
if ret:
object_points.append(objp)
refined_corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
image_points.append(refined_corners)
draw_img = cv2.drawChessboardCorners(img.copy(), chessboard_size, refined_corners, True)
cv2.imshow('img', draw_img)
cv2.waitKey(500)
cv2.destroyAllWindows()
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(object_points, image_points, gray.shape[::-1], None, None)
print("Camera matrix :\n", mtx)
print("\ndistortion coefficients:\n", dist)
```
此段代码读取指定路径下的所有 jpg 文件,并尝试从中提取棋盘格模式的位置信息;成功找到后会进一步优化角点定位精度并通过 `cv2.calibrateCamera()` 计算出相机矩阵 (`mtx`) 及畸变系数(`dist`).
阅读全文
相关推荐


















