标定相机

矫正失真的公式

其中r是未矫正的点(x,y)对应的棋盘上的点距离棋盘中心的距离。
使用棋盘矫正法,推荐至少拍摄不同角度和距离的20张棋盘照片。

OpenCV

标定步骤:
1.objpoints,对应实体的3D坐标,项目中使用的棋盘尺寸是8x6
2.imgpoints,对应照片的2D坐标
3.cv2.calibrateCamera()
4.cv2.undistort()

objpoints


由于不管照片是什么角度,棋盘始终是一个棋盘,objp适用于整个标定过程。

objp = np.zeros((6*8,3), np.float32)
objp[:,:2] = np.mgrid[0:8, 0:6].T.reshape(-1,2)
objpoints = [] # 3d points in real world space

imgpoints, 角点检测

只检测内角点,即2白块与2黑块相交的点

官方文档的摘抄:

findChessboardCorners(image, patternSize[, corners[, flags]]) → retval, corners
drawChessboardCorners(image, patternSize, corners, patternWasFound) → None

标定时用到超过20张图片,存入一个list

# 标定时用到超过20张图片,存入一个list
images = glob.glob('calibration_wide/GO*.jpg')# 对每张标定图片寻找角点
for idx, fname in enumerate(images):img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Find the chessboard cornersret, corners = cv2.findChessboardCorners(gray, (8,6), None)# If found, add object points, image pointsif ret == True:objpoints.append(objp)imgpoints.append(corners)# Draw and display the cornerscv2.drawChessboardCorners(img, (8,6), corners, ret)#write_name = 'corners_found'+str(idx)+'.jpg'#cv2.imwrite(write_name, img)cv2.imshow('img', img)cv2.waitKey(500)cv2.destroyAllWindows()

完成贫病交迫heimgp后,开始标定

标定

1.cv2.calibrateCamera
输入中的gray.shape[::-1]是图像尺寸(H x W),这个尺寸从灰度图中获得比较方便。
返回mtx摄像机矩阵,dist畸变参数,,rvecs旋转和tvecs平移向量

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)

2.dst = cv2.undistort
这一步需要上一步中得到的mtx,dist作为输入参数;返回矫正后的图片。

dst = cv2.undistort(img, mtx, dist, None, mtx)
import pickle# Test undistortion on an image
img = cv2.imread('calibration_wide/test_image.jpg')
img_size = (img.shape[1], img.shape[0])# Do camera calibration given object points and image points
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size,None,None)dst = cv2.undistort(img, mtx, dist, None, mtx)
cv2.imwrite('calibration_wide/test_undist.jpg',dst)# Save the camera calibration result for later use (we won't worry about rvecs / tvecs)
dist_pickle = {}
dist_pickle["mtx"] = mtx
dist_pickle["dist"] = dist
pickle.dump( dist_pickle, open( "calibration_wide/wide_dist_pickle.p", "wb" ) )
#dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
# Visualize undistortion
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10))
ax1.imshow(img)
ax1.set_title('Original Image', fontsize=30)
ax2.imshow(dst)
ax2.set_title('Undistorted Image', fontsize=30)

高级车道线查找项目的相机标定相关推荐

  1. 实战教程 | 车道线检测项目实战,霍夫变换 新方法 Spatial CNN

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 此文按照这样的逻辑进行撰写.分享机器学习.计算机视觉的基础知识,接着我们以一个实际的项目,带领大家自己 ...

  2. 【深度学习】实战教程 | 车道线检测项目实战,霍夫变换 新方法 Spatial CNN

    此文按照这样的逻辑进行撰写.分享机器学习.计算机视觉的基础知识,接着我们以一个实际的项目,带领大家自己动手实践.最后,分享更多学习资料.进阶项目实战,这部分属于我CSDN上的专栏,最后会按照顺序给出相 ...

  3. 2020-10-06 车道线检测项目及相关学习经验

    车道线检测项目的本质是一个边缘检测的算法的延伸. 在汽车正常行驶过程中,车道线往往出于车体视野的中心对称位置,其位置相对固定. 下图展示了一个该场景,随着车辆的移动,车道线基本处于该黑色虚线所包围的区 ...

  4. 传统车道线检测项目学习总结(附源码,复现日志与github链接)

    传统车道线检测 Advanced_Lane_Detection项目的复现,更换了其中的数据,修改了相应脚本,添加了可视化功能.话不多说,直接上图显示效果. 文章目录 传统车道线检测 环境要求 项目流程 ...

  5. 无人驾驶之高级车道线检测-AdvanceLane_finding_release

    本篇博客整个项目源码:github 引言 前面我们介绍车道线检测的处理方法:车道线检测之lanelines-detection 在文章末尾,我们分析了该算法的鲁棒性,当时我们提出了一些解决方法,比如说 ...

  6. 车道线分割项目记录-tusimple数据集处理

    一.数据集包含信息 该项目训练所使用的数据集是tusimple数据集,其中用于训练及验证的有约3500张图,测试的有2000多张图.数据集中,除了图片,还包含了json文件,携带了车道线信息.文件路径 ...

  7. 车道线分割项目记录-模型构建

    目录 一.模型概述 二.BackBone构建 三.语义分割分支 四.实例分割分支 五.代码汇总 一.模型概述 整个模型有一个backbone,以及两个分支,输入图片之后,先进入backbone,这一部 ...

  8. 自动驾驶(十四)---------车道线检测

    目前车道线检测主要有两种方法:传统方法,深度学习,本文主要从传统方法出发来介绍车道线检测,毕竟Mobileye也没有用到太多的深度学习(以前和Moblieye有交流). 再者,一直以来我们传统汽车行业 ...

  9. 详解车道线检测算法之传统图像处理

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 / 导读 / 车道线检测算法分为传统图像处理方法和深度学习方法.本文详细介绍用传统图像处理方法来解决车 ...

最新文章

  1. CSS 从入门到放弃系列:CSS的引入方式
  2. Nignx平滑升级(1.8.0-1.8.1)
  3. PostgreSQL的那点事儿
  4. php个人云存储,使用OwnCloud搭建个人私有云存储
  5. Windows下Anaconda3安装及使用教程
  6. dict取值_Python基础数据类型「list、tuple、dict」
  7. SiamMask算法详解
  8. 全景视觉空间直线检测_视觉SLAM深度解读
  9. 如何修改wince的网络配置
  10. c++ char*初始化_[零食时间]C/C++ 字符串全家桶(字符串表示/定义、字符串输入输出、易错点等)上半桶...
  11. 解封装(八):av_seek_frame改变播放进度函数
  12. 我的媒体播放器——多媒体编程
  13. 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
  14. 获取文件夹中所有图片文件
  15. loadrunner 集合点lr_rendezvous 规则以及操作使用
  16. 使用ffmpeg合并mp4文件
  17. 【深度学习】关于pytorch中使用pretrained的模型,对模型进行调整
  18. 光纤环形镜FBG传感器
  19. vue实现ToDoList待办事项/清单
  20. 秒 毫秒 微秒 纳秒 皮秒。。时间单位换算

热门文章

  1. oracle中dba所能查询的表,ORACLE--DBA常用查询
  2. 微机实验五 —— 8255A接口电路应用设计实验(基于Proteus工具)
  3. ios 图片加载内存尺寸_iOS加载超清大图内存暴涨问题解决
  4. 漫画的过去、人的自我认知和任何视觉艺术的图画词汇表
  5. 上微信怎么同时用计算机,1个电脑怎么开2个微信_让电脑同时登录两个微信的方法-系统城...
  6. 【Linux脚本篇】shell变量的使用
  7. 基于51单片机调频收音机 FM电台收音机系统设计
  8. 人工智能已到瓶颈! AI未来发展方向
  9. 旺旺群发/店铺推广 v3.13 绿色破解版
  10. 适合初学者的强化学习教程(1): python使用gym实践和注意事项