【问题标题】:OpenCV camera calibration, can not control distortion constantsOpenCV相机校准,无法控制失真常数
【发布时间】:2012-04-26 00:51:10
【问题描述】:

所有, 我有一个使用 OpenCV 校准相机的 python 脚本。它现在在 stackoverflow 帮助的帮助下工作。但是,我遇到了失真常数的问题。我似乎无法控制适合的常量数量。我只想要 4 个失真常数,而不是 5 个。在文档中它指出“也就是说,如果向量包含四个元素,则意味着 K3=0”,这就是我想要的。于是我发起dist_const = np.zeros(4),传给cv2.calibrateCamera,但是返回的dist_const有5个常量返回。我也尝试了标志 CV_CALIB_FIX_K3,但不​​断收到“必须分配一个迭代器”错误。有没有人见过这种行为,任何帮助将不胜感激。

import cv2 
from cv2 import cv 
import numpy as np

obj_points = [[-9.7,3.0,4.5],[-11.1,0.5,3.1],[-8.5,0.9,2.4],[-5.8,4.4,2.7],[-4.8,1.5,0.2],[-6.7,-1.6,-0.4],[-8.7,-3.3,-0.6],[-4.3,-1.2,-2.4],[-12.4,-2.3,0.9],[-14.1,-3.8,-0.6],[-18.9,2.9,2.9],[-14.6,2.3,4.6],[-16.0,0.8,3.0],[-18.9,-0.1,0.3],[-16.3,-1.7,0.5],[-18.6,-2.7,-2.2]]

img_points = [[993.0,623.0],[942.0,705.0],[1023.0,720.0],[1116.0,645.0],[1136.0,764.0],[1071.0,847.0],[1003.0,885.0],[1142.0,887.0],[886.0,816.0],[827.0,883.0],[710.0,636.0],[837.0,621.0],[789.0,688.0],[699.0,759.0],[768.0,800.0],[697.0,873.0]]

obj_points = np.array(obj_points,'float32')
img_points = np.array(img_points,'float32')

w = 1680
h = 1050
size = (w,h)

camera_matrix = np.zeros((3,3),'float32')
camera_matrix[0,0]= 2200.0
camera_matrix[1,1]= 2200.0
camera_matrix[2,2]=1.0

camera_matrix[0,2]=750.0 
camera_matrix[1,2]=750.0

dist_coefs = np.zeros(4,'float32')

retval,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera([obj_points],[img_points],size,camera_matrix,dist_coefs,flags=cv.CV_CALIB_USE_INTRINSIC_GUESS)

print camera_matrix
print dist_coefs

链接到我的另一个问题,dist_coefs 的结果来自我试图用 python/opencv 替换的 caltech matlab 代码。

约翰

【问题讨论】:

    标签: python matlab opencv computer-vision simplecv


    【解决方案1】:

    将 calibrateCamera 调用更改为:

    retval,camera_matrix,dist_coefs,rvecs,tvecs = cv2.calibrateCamera([obj_points],[img_points],size,camera_matrix,dist_coefs,flags=cv2.CALIB_USE_INTRINSIC_GUESS + cv2.CALIB_FIX_K3)
    

    您不希望我像在示例中那样混合 cv2 和 cv 命名空间。

    【讨论】:

      【解决方案2】:

      我明白你的意思。可能是因为您只使用单个图像进行校准。

      【讨论】:

      • 这个似乎没有好的答案。我在雅虎的opencv列表中发布了同样的问题,没有接受者。这就是为什么大多数 CV 研究都是使用 Matlab 完成的。复制我已经在 Matlab 中运行的东西需要付出很多努力。
      【解决方案3】:

      我遇到了同样的问题,我找到的解决方案是:

      import cv2
      from cv2 import cv
      
      
      ... flags = cv2.cv.CALIB_USE_INTRINSIC_GUESS + ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 2016-02-05
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 2014-10-23
        • 1970-01-01
        相关资源
        最近更新 更多