首页 > 解决方案 > 如何计算未失真图像的分辨率?

问题描述

由于像素的不均匀分布和(通常)黑色边缘的裁剪,未失真图像的分辨率通常低于原始图像。(请参见下面的示例)

在此处输入图像描述

所以给定相机校准参数,例如 ROS 格式

image_width: 1600
image_height: 1200
camera_name: camera1
camera_matrix:
  rows: 3
  cols: 3
  data: [1384.355466887268, 0, 849.4355708515795, 0, 1398.17734010913, 604.5570699746268, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.0425049914802741, -0.1347528158561486, -0.0002287009852930437, 0.00641133892300999, 0]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
  rows: 3
  cols: 4
  data: [1379.868041992188, 0, 860.3000889574832, 0, 0, 1405.926879882812, 604.3997819099422, 0, 0, 0, 1, 0]

如何计算未失真校正图像的最终分辨率?

标签: opencvros

解决方案


从 Fruchtzwerg 的评论中,下面将给出未失真图像的有效 ROI

import cv2
import numpy as np
mtx = np.array([
    [1384.355466887268, 0, 849.4355708515795],
    [ 0, 1398.17734010913, 604.5570699746268],
    [0, 0, 1]])
dist = np.array([0.0425049914802741, -0.1347528158561486, -0.0002287009852930437, 0.00641133892300999, 0])

cv2.getOptimalNewCameraMatrix(mtx, dist, (1600, 1200), 1)

推荐阅读