{"id":13445214,"url":"https://github.com/dyfcalid/CameraCalibration","last_synced_at":"2025-03-20T20:32:04.831Z","repository":{"id":41064019,"uuid":"355216492","full_name":"dyfcalid/CameraCalibration","owner":"dyfcalid","description":"Fisheye or Normal Camera Intrinsic and Extrinsic Calibration. Surround Camera Bird Eye View Generator.","archived":false,"fork":false,"pushed_at":"2024-05-12T04:42:12.000Z","size":12058,"stargazers_count":554,"open_issues_count":10,"forks_count":162,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-08-01T05:12:27.006Z","etag":null,"topics":["bev","calibration","camera","extrinsics","fisheye","homography","intrinsics","opencv","python","surround","undistortion"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dyfcalid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-06T14:20:35.000Z","updated_at":"2024-08-01T05:12:27.007Z","dependencies_parsed_at":"2024-11-01T16:30:33.200Z","dependency_job_id":null,"html_url":"https://github.com/dyfcalid/CameraCalibration","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyfcalid%2FCameraCalibration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyfcalid%2FCameraCalibration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyfcalid%2FCameraCalibration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyfcalid%2FCameraCalibration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dyfcalid","download_url":"https://codeload.github.com/dyfcalid/CameraCalibration/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244685454,"owners_count":20493269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bev","calibration","camera","extrinsics","fisheye","homography","intrinsics","opencv","python","surround","undistortion"],"created_at":"2024-07-31T05:00:26.452Z","updated_at":"2025-03-20T20:32:04.172Z","avatar_url":"https://github.com/dyfcalid.png","language":"Python","readme":"# Camera Calibration\n\u003e 集合了相机标定相关的多个脚本工具，便于完成完整的车载环视相机标定流程  \n\u003e 各代码文件均可单独使用，此外也提供了外部接口以供调用  \n  \n![](https://img.shields.io/badge/Language-python-blue.svg) 　\n![](https://img.shields.io/badge/Requirement-openCV-brightgreen) 　\n![License](https://img.shields.io/badge/License-GPL-orange.svg)\n\n## DEMO\n![DEMO](demo.gif)\n\n## Quick Start\n克隆该仓库，运行main.py查看简单示例结果  \n确保已经安装好**opencv(\u003e=3.4.2)** 以及**numpy(\u003e=1.19.2)** \n```\ngit clone https://github.com/dyfcalid/CameraCalibration.git\ncd ./CameraCalibration\npython main.py\n```  \n  \n## File Tree  \n\u003e 项目结构预览  \n```\n│  main.py                    // 主程序\n│\n├─ExtrinsicCalibration\n│  │  extrinsicCalib.ipynb    // 外参标定代码(含注释)\n│  │  extrinsicCalib.py       // 外参标定python代码\n│  │  README.md               // 外参标定文档\n│  │  __init__.py             // init文件，API说明\n│  │\n│  └─data                     // 外参标定数据文件夹\n│\n├─IntrinsicCalibration\n│  │  intrinsicCalib.ipynb    // 内参标定代码(含注释)\n│  │  intrinsicCalib.py       // 内参标定python代码\n│  │  README.md               // 内参标定文档\n│  │  __init__.py             // init文件，API说明\n│  │\n│  └─data                     // 内参标定数据文件夹\n│\n├─SurroundBirdEyeView\n│  │  surroundBEV.ipynb       // 环视鸟瞰代码(含注释)\n│  │  surroundBEV.py          // 环视鸟瞰python代码\n│  │  README.md               // 环视鸟瞰文档\n│  │  __init__.py             // init文件，API说明\n│  │\n│  └─data                     // 环视鸟瞰参数文件夹\n│     ├─front                 // 存放前相机K、D、H参数文件\n│     ├─back                  // 存放后相机K、D、H参数文件\n│     ├─left                  // 存放左相机K、D、H参数文件\n│     └─right                 // 存放右相机K、D、H参数文件\n│\n└─Tools                       // 一些相关的标定工具\n    │  collect.py             // 图像采集\n    │  undistort.py           // 图像去畸变\n    └─data                    // 数据文件夹\n\n```\n\n  \n## Camera Intrinsic Calibration \n\u003e 相机内参标定   \n  \n`intrinsicCalib.py`  [查看文档](./IntrinsicCalibration/README.md/)  \n包括相机的**在线标定**和**离线标定**，包含**鱼眼相机**和**普通相机**模型，  \n并支持**相机、视频、图像**三种输入，生成相机内参和畸变向量   \n\n- 可以直接运行python文件，并通过argparse输入更多参数，argparse参数表详见文档\n```\npython intrinsicCalib.py\n```  \n\n- 此外，提供`InCalibrator`类供调用，使用说明如下，具体示例见**main.py**  \n```\nfrom intrinsicCalib import InCalibrator\n\ncalibrator = InCalibrator(camera_type)              # 初始化内参标定器\nfor img in images:\n    result = calibrator(img)                        # 每次读入一张原始图片 更新标定结果\nundist_img = calibrator.undistort(raw_frame)        # 使用undistort方法得到去畸变图像\n```\n或者调用`CalibMode`类，使用预设好的标定模式，各模式详见文档  \n```\nfrom intrinsicCalib import InCalibrator, CalibMode\n\ncalibrator = InCalibrator(camera_type)              # 初始化内参标定器\ncalib = CalibMode(calibrator, input_type, mode)     # 选择标定模式\nresult = calib()                                    # 开始标定\n```\n可以直接修改原文件中的各参数，或使用`get_args()`方法获取参数并修改\n```\nargs = InCalibrator.get_args()                      # 获取args参数\nargs.INPUT_PATH = './IntrinsicCalibration/data/'    # 修改args参数\ncalibrator = InCalibrator(camera_type)              # 初始化内参标定器\n```  \n\n示例结果：  \n\u003cimg src=\"https://i.loli.net/2021/06/22/nxOsU1mM4D3kJWS.png\" width=\"750\" height=\"200\" alt=\"inCalib_result.jpg\"/\u003e  \n\u003cimg src=\"https://i.loli.net/2021/06/22/iVETOUIMqCRHDYr.png\" width=\"750\" height=\"300\" alt=\"inCalib_image.jpg\"/\u003e  \n  \n  \n## Camera Extrinsic Calibration  \n\u003e 相机外参标定   \n\n`extrinsicCalib.py`  [查看文档](./ExtrinsicCalibration/README.md/)    \n完成相机的**外参标定**，实现**任意两个视图（包含相同标定板）的转换**，生成**单应性变换矩阵**  \n如：基于**无人机相机**和**车载环视相机**同时拍摄地面的标定板，进行车载相机的外参标定，  \n生成车载相机至无人机相机的单应性变换矩阵，实现**鸟瞰图**的转换（即将车载相机视角转换至无人机视角）    \n  \n- 可以直接运行python文件，并通过argparse输入更多参数，argparse参数表详见文档\n```\npython extrinsicCalib.py\n```  \n  \n- 此外，提供`ExCalibrator`类供调用，使用说明如下，具体示例见**main.py**  \n```\nfrom extrinsicCalib import ExCalibrator\n\nexCalib = ExCalibrator()                            # 初始化外参标定器\nhomography = exCalib(src_raw, dst_raw)              # 输入对应的两张去畸变图像 得到单应性矩阵\nsrc_warp = exCalib.warp()                           # 使用warp方法得到原始图像的变换结果\n```    \n可以直接修改原文件中的各参数，或使用`get_args()`方法获取参数并修改  \n```\nargs = ExCalibrator.get_args()                      # 获取args参数\nargs.INPUT_PATH = './ExtrinsicCalibration/data/'    # 修改args参数\nexCalib = ExCalibrator()                            # 初始化外参标定器\n```    \n  \n示例结果：   \n![exCalib_result.jpg](https://i.loli.net/2021/06/22/5fMmcxTuZ2aIUyN.png)   \n  \n  \n## Surround Camera Bird Eye View  \n\u003e 环视相机鸟瞰拼接图生成  \n  \n`surroundBEV.py`  [查看文档](./SurroundBirdEyeView/README.md/)    \n输入前后左右四张**原始相机图像**，生成**鸟瞰图**  \n包括**直接拼接**和**融合拼接**，并可以进行**亮度平衡和白平衡**   \n  \n- 可以直接运行python文件，并通过argparse输入更多参数，argparse参数表详见文档\n```\npython surroundBEV.py\n```  \n  \n- 此外，提供`BevGenerator`类供调用，使用说明如下，具体示例见**main.py**  \n```\nfrom surroundBEV import BevGenerator\n\nbev = BevGenerator()                                # 初始化环视鸟瞰生成器\nsurround = bev(front,back,left,right)               # 输入前后左右四张原始相机图像 得到拼接后的鸟瞰图\n```    \n上面生成的是直接拼接的结果，能够保证**实时性**，此外也可以使用融合和平衡，但速度较慢，如\n```\nbev = BevGenerator(blend=True, balance=True)        # 使用图像融合以及平衡\nsurround = bev(front,back,left,right,car)           # 可以加入车辆图片\n```\n可以直接修改原文件中的各参数，或使用`get_args()`方法获取参数并修改  \n```\nargs = BevGenerator.get_args()                      # 获取环视鸟瞰args参数\nargs.CAR_WIDTH = 200\nargs.CAR_HEIGHT = 350                               # 修改为新的参数\nbev = BevGenerator()                                # 初始化环视鸟瞰生成器\n```    \n  \n示例结果：    \n\u003cdiv align=center\u003e\u003cimg src=\"https://i.loli.net/2021/06/22/fOwPsTYkCFeo8dW.png\" width=\"740\" height=\"170\" alt=\"camera.jpg\"/\u003e\u003c/div\u003e  \n\u003cdiv align=center\u003e\u003cimg src=\"https://i.loli.net/2021/06/22/HeKJVBm2vEINy4z.png\" width=\"360\" height=\"400\" alt=\"bev.jpg\"/\u003e\u003c/div\u003e   \n   \n   \n## Other Tools  \n用`collect.py`可以开启相机完成图像或视频的**数据采集**  \n用`undistort.py`可以批量完成图像的**去畸变处理**   \n用`decomposeH.py`可以由单应性矩阵H和相机内参K得到**旋转矩阵R和平移矩阵T** （有多个结果需要筛选）   \n用`timeAlign.py`可以将以**时间戳**命名的图片按时间**对准**，得到对应的列表   \n用`img2vid.py`可以将图片转化为视频  \n     \n## License  \n[GPL-3.0 License](LICENSE)  \n  \n  \n*`Copyright (c) 2021 ZZH`*  \n  \n  \n","funding_links":[],"categories":["2. Sensor and Calibration Tools"],"sub_categories":["2.2 Calibration Tools"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyfcalid%2FCameraCalibration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdyfcalid%2FCameraCalibration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyfcalid%2FCameraCalibration/lists"}