OpenCV - 鱼眼校准值(重用保存在 JSON 文件中的值)

Posted

技术标签:

【中文标题】OpenCV - 鱼眼校准值(重用保存在 JSON 文件中的值)【英文标题】:OpenCV - Fisheye Calibration Values (Reuse values saved in JSON file) 【发布时间】:2019-09-08 12:35:14 【问题描述】:

我已经校准了我的鱼眼相机,以获得新的矩阵和参数。我已将它们保存在 JSON 文件中。现在我再次重用 JSON 文件来校准我的相机时遇到了问题。

转自https://github.com/mesutpiskin/opencv-fisheye-undistortion/blob/master/src/python/fisheye_calibration_undistortion.py

''''
I have realized the K has a different structure. e.g.
<class 'numpy.ndarray'>
[[ 2.01424373e+06  0.00000000e+00  6.50364504e+02]
 [ 0.00000000e+00  2.04712849e+06 -5.14192522e+02]
 [ 0.000000

00e+00  0.00000000e+00  1.00000000e+00]]
''''

保存值,'K':np.asarray(K).tolist() (读取时需要转换回来???)

'''
data = 'dim1': dim1,'dim2':dim2,'dim3': dim3,'K': np.asarray(K).tolist(),'D':np.asarray(D).tolist(),'new_K':np.asarray(new_K).tolist(),'scaled_K':np.asarray(scaled_K).tolist(),'balance':balance
                
import json
with open("fisheye_calibration_data.json", "w") as f:
    json.dump(data, f)    
'''

从 JSON 中读取值(这里有问题)

'''
with open('fisheye_calibration_data.json') as json_file:

    data = json.load(json_file)
    dim1 = data["dim1"]
    dim2 = data["dim2"]
    dim3 = data["dim3"]
    K = data["K"]
    D = data["D"]
    new_K = data["new_K"]
    scaled_K = data["scaled_K"]
    balance = data["balance"]
    
new_K = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(scaled_K, D, dim2, np.eye(3), balance=balance)

map1, map2 = cv2.fisheye.initUndistortRectifyMap(scaled_K, D, np.eye(3),new_K, dim3, cv2.CV_16SC2)
    
undistorted_img = cv2.remap(frame, map1, map2,interpolation=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT) 
'''

得到的错误:

-----------------ERROR_----------------------
    new_K = cv2.fisheye.estimateNewCameraMatrixForUndistortRectify(scaled_K, D,dim2, np.eye(3), balance=balance)

TypeError: Expected cv::UMat for argument 'K'

【问题讨论】:

检查 K 的类型,(以及所有其他) - 尝试将其从列表转换回 np.array @Stoner 谢谢,最初我将它转换为 np.asarray,并认为问题来自这里。我还必须像你提到的那样 tuple(data["dim3"]) (其余的) 【参考方案1】:

dim1 = 元组(数据[“dim3”]) K = np.array(数据["K"])

【讨论】:

以上是关于OpenCV - 鱼眼校准值(重用保存在 JSON 文件中的值)的主要内容,如果未能解决你的问题,请参考以下文章

鱼眼校准 OpenCV Python

OpenCV 鱼眼校准 C++ 输出与 Python 不同

使用 opencv 3.0 beta 进行鱼眼镜头校准

使用opencv3鱼眼模型的圆形鱼眼扭曲

如何通过openCV模拟鱼眼镜头效果?

如何使用 OpenCV 使裁剪后的鱼眼图像不失真