OpenCV图像坐标系疑问:整数坐标对应像素边界还是中心?
OpenCV图像坐标系与相机主点的一致性问题
已知OpenCV图像坐标系原点位于图像左上角,但整数坐标对应的是像素的左上角边界还是像素中心,这一点并未明确。在实际使用中出现了以下矛盾:
- 在同一ChArUco板上分别运行
cv::aruco::interpolateCornersCharuco(...)和cv::findChessboardCorners(...)后,结果存在不一致:前者的坐标网格是以像素边界为基准,而后者以及cv::circle(...)等绘图函数的坐标则是以像素中心为基准。 - 更令人困惑的是,
cv::aruco::interpolateCornersCharuco(...)与cv::calibrateCamera(...)似乎都未对坐标做调整就直接调用cv::solvePnP(...),这可能导致同一输入图像得到不一致的相机参数。
这个问题最终可以转化为相机矩阵的核心疑问:完美针孔相机的主点应该设为(img_width / 2, img_height / 2),还是((img_width - 1)/2, (img_height - 1)/2)?
- 若取前者,光轴上的点会投影到像素边界坐标系的中心;
- 若取后者,光轴上的点则会投影到像素中心坐标系的中心。
内容的提问来源于stack exchange,提问作者DrPepperJo
相关产品推荐
相关产品推荐

