• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
OpenCV 学习笔记(3)matlab相机参数标定

 

0准备标定版

F:\dongdong\0tool\MATLAB\help\toolbox\vision\examples

 

 matlab自动准备了一个pdf标定版打印出来,注意

 

 

 

1采集相机标定图像

采集代码

python 运行后,2秒自动抓拍存在save文件夹下面

自己拍摄不同的角度

 

 

import cv2
import datetime

#二维码动态识别
ImgW=640
ImgH=480
camera=cv2.VideoCapture(0)
camera.set(3,ImgW) #设置分辨率
camera.set(4,ImgH)


i=0


cv2.namedWindow('frame',0)

start = datetime.datetime.now()

while True:
    (grabbed,frame)=camera.read()
    #获取画面中心点
    h1,w1= frame.shape[0],frame.shape[1]


   
    cv2.imshow('frame',frame)
    key=cv2.waitKey(1)
    if key & 0xFF == ord('s'):  # 按q保存一张图片
        i=i+1
        name="./save/frame"+str(i)+".jpg"
        cv2.imwrite(name, frame)
       
    elif key==ord('q'):
        break

    end = datetime.datetime.now()
    timejiange=int(str((end-start).seconds))
    
    if timejiange>2:        
        i=i+1
        name="./save/frame"+str(i)+".jpg"
        cv2.imwrite(name, frame)
        start = datetime.datetime.now()
        print("保存",i)
    
    

camera.release()
cv2.destroyAllWindows()

  

 

2开始标定

 得到一组图像,打开matlab开始标定

    1. 应用程序下找到Camera Calibration工具箱

       

       

    2. 加载待标定的图像,这里选择2coefficients计算经向畸变更稳这里写图片描述

    3.  

       

        

    4. 填写棋盘格每个格子边长的真实值   实验室的标定板  20mm  毫米    

    5.  

       

       

    6. 可以预览成功检测出棋盘格的图像,然后开始标定,点击Calibrate

    7.  

       

       

       

       

       

    8. 平均误差小于0.5即可,超过的鼠标点击对应的柱状,删除键

    9. 这里写图片描述

    10.  

       

       

    11. 导出相机标定参数

       

       

    12. 在matlab工作空间里可以看到相机参数的属性

    13. 普通相机参数解析
    14.  

       

       

       相机的内参矩阵 

    15.  

       

       

       


      径向畸变和切向畸变。

    16. 这里写图片描述

 

谷壳USB相机标定结果

 

 相机内参 3*3一共9个

831.514230246688 0 0
0 831.972596866759 0
327.324903206150 262.347092547845 1

真实使用需要转置沿着对角线翻上去

畸变参数

径向畸变Radial distortion  径向畸变3个(k1,k2,k3)

 

 

 (我们选择的是两个参数 k3认为0)

0.195387502976378 -1.36446754085673

 

切向畸变tangentialdistortion  2个(p1,p2)

 

 

 

 

 0 0

 

使用的时候

OpenCV中的畸变系数的排列(这点一定要注意k1,k2,p1,p2,k3),千万不要以为k是连着的。
这里写图片描述

 

代码调用

#相机内参 matlab标定出来的结果 不能直接用,需要沿着对角线翻转
fx = 831.514230246688
fy = 831.972596866759
cx = 327.324903206150
cy = 262.347092547845
K = np.array([[fx, 0., cx],
              [0., fy, cy],
              [0., 0., 1.0]])

#畸变系数k1 k2 pq p2 k3
dist=np.array(([[0.195387502976378 ,-1.36446754085673, 0 ,0 ,0]]))

  

 xml保存替换数据

<?xml version="1.0" encoding="utf-8"?>
<opencv_storage>
   <camera-matrix type_id="opencv-matrix">
      <rows>3</rows>
      <cols>3</cols>
      <dt>d</dt>
      <data>3099.7082447931371000 0.0000000000000000 1077.7535540640906000 
0.0000000000000000 3086.4434775466948000 1826.5450377846478000 
0.0000000000000000 0.0000000000000000 1.0000000000000000 
</data>
   </camera-matrix>
   <distortion type_id="opencv-matrix">
      <rows>5</rows>
      <cols>1</cols>
      <dt>d</dt>
      <data>-0.0890744873306951 5.1317176243308209 -0.0051019418392772 -0.0021081150992697 -39.0645994879151530 </data>
   </distortion>
</opencv_storage>

  

 

鱼眼相机参数解析

 

 

可视化结果

 

 

 

 

 

 

 

 

img=imread("10.jpg")
result = undistortFisheyeImage(img, cameraParams.Intrinsics);
subplot(1,2,1);imshow(img);title('原始图像')
subplot(1,2,2);imshow(result);title('校正图像')

 

对比

 

posted on 2018-06-19 17:41  MKT-porter  阅读(671)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3