120 度广角摄像头可以用,但需要处理畸变
结论:可以用,但必须做畸变校正,否则会影响检测精度(尤其是 YOLO 这种对几何敏感的模型)。
广角摄像头的利弊
| 优点 |
缺点 |
视野大,覆盖范围广 |
边缘畸变严重(桶形畸变) |
适合全场感知 |
直线变弯曲,影响距离估计 |
近处物体也能看到 |
需要额外计算校正 |
畸变校正方案
方案 A:使用 OpenCV 校正(推荐,灵活)
import cv2
import numpy as np
# 1. 标定获取畸变参数(一次性)
# 使用棋盘格标定,参考 OpenCV 教程
# 得到 camera_matrix 和 dist_coeffs
# 2. 预计算校正映射(只需做一次)
FRAME_W, FRAME_H = 640, 480
camera_matrix = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]]) # 替换为你的内参
dist_coeffs = np.array([k1, k2, p1, p2, k3]) # 替换为你的畸变参数
map1, map2 = cv2.initUndistortRectifyMap(
camera_matrix, dist_coeffs, None, None, (FRAME_W, FRAME_H), cv2.CV_16SC2)
# 3. 在主循环中应用校正
def undistort_frame(frame):
return cv2.remap(frame, map1, map2, cv2.INTER_LINEAR)
# 使用示例
nv12_raw = cam.get_img(2, FRAME_W, FRAME_H)
frame = cv2.cvtColor(nv12_raw.reshape(...), cv2.COLOR_YUV2BGR_NV12)
corrected = undistort_frame(frame) # ← 添加这一步
耗时:640×480 约 3-5ms(可接受)
方案 B:使用 RDK GDC 硬件加速(更快)
RDK X5 的 GDC(Graphic Display Controller)支持硬件畸变校正:
# 参考社区案例 [topic/34910](https://forum.d-robotics.cc/t/topic/34910)
# 使用 GDC 工具进行 LDC(Lens Distortion Correction)
# 1. 使用 gdc-tool-gui 生成 LDC 配置文件
# 2. 在代码中加载配置
from hobot_gdc import gdc_api
ldc_config = "/path/to/ldc_config.json"
gdc_api.apply_ldc(frame, ldc_config)
耗时:< 2ms(硬件加速)
获取工具:
方案 C:模型训练时增强(不推荐单独使用)
在训练 YOLO 时添加畸变数据增强,让模型适应畸变:
# YOLOv5 data.yaml 中添加增强
augment:
degrees: 0
translate: 0.1
scale: 0.5
shear: 0
perspective: 0
# 添加桶形畸变模拟
缺点:不能根本解决问题,建议配合方案 A/B 使用。
关键问题:你的摄像头是什么传感器型号?
120 度广角是镜头特性,不是传感器型号。请确认:
| 传感器 |
RDK X5 支持 |
最大帧率 |
建议 |
| IMX219 |
 |
30 FPS |
可用,按之前方案优化 |
| OV5647 |
 |
需验证 |
先跑验证脚本 |
| SC130AI |
 |
60 FPS |
最佳选择 |
| 其他 |
 |
需适配 |
风险较高 |
查看方法:
# 查看摄像头模组上的芯片型号
dmesg | grep -i "sensor\|imx\|ov\|sc"
帧率影响估算
| 操作 |
耗时(640×480) |
30 FPS 下是否可行 |
| 原始采集 |
33ms |
 |
| + OpenCV 校正 |
+3-5ms |
 |
| + GDC 硬件校正 |
+1-2ms |
 |
| + 推理(320 输入) |
6-8ms |
 |
| + 简化后处理 |
5-8ms |
 |
| 总耗时 |
~50ms |
可达 20+ FPS |
建议
- 先确认传感器型号(IMX219/OV5647/其他)
- 如果是 IMX219:接受 30 FPS,用 OpenCV 做畸变校正
- 如果是 OV5647:先跑验证脚本确认 60 FPS 支持
- 如果还没买:建议买 SC130AI 广角版(官方支持 60 FPS)
需要我帮你:
- 写 OpenCV 畸变校正代码(集成到你现有 pipeline)
- 提供棋盘格标定教程(获取畸变参数)
- 优化 30 FPS 下的整体性能
请告诉我你的摄像头传感器型号和是否需要 60 FPS!