opencv-python 摄像机标定
先上传20张用摄像头拍摄的图
将这20张摄像头拍摄的图片放入同一个文件夹中,当然 你也可以自己把电脑作为屏幕拍摄不低于十张的图
import cv2
import numpy as np
import glob
from numpy import array as matrix, arange# 找棋盘格角点
# 阈值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# w h分别是棋盘格模板长边和短边规格(角点个数)
w = 9 #注意这个是横向想的角点个数 你可以理解为第一行黑方块与第二行黑方块交点的个数
h = 6 #纵向同理可得# 世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐标,记为二维矩阵,认为在棋盘格这个平面上Z=0
objp = np.zeros((w * h, 3), np.float32) # 构造0矩阵,88行3列,用于存放角点的世界坐标
objp[:, :2] = np.mgrid[0:w, 0:h].T.reshape(-1, 2) # 三维网格坐标划分# 储存棋盘格角点的世界坐标和图像坐标对
objpoints = [] # 在世界坐标系中的三维点
imgpoints = [] # 在图像平面的二维点
record = []
images = glob.glob('./CarND-Advanced-Lane-Lines-master/camera_cal/*.jpg')
for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 粗略找到棋盘格角点 这里找到的是这张图片中角点的亚像素点位置,共11×8 = 88个点,gray必须是8位灰度或者彩色图,(w,h)为角点规模ret, corners = cv2.findChessboardCorners(gray, (w, h))# 如果找到足够点对,将其存储起来if ret == True:record.append(fname)# 精确找到角点坐标corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)# 将正确的objp点放入objpoints中objpoints.append(objp)imgpoints.append(corners)# 将角点在图像上显示cv2.drawChessboardCorners(img, (w, h), corners, ret)cv2.imshow('findCorners', img)cv2.waitKey()
cv2.destroyAllWindows()
# 标定 返回标定结果、相机的内参数矩阵、畸变系数、旋转矩阵和平移向量
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)print('ret:', ret)
print('内参矩阵:', mtx)
print('畸变系数:', dist)
print('旋转矩阵:', rvecs)
print('平移向量:', tvecs)# 去畸变
img2 = cv2.imread('./CarND-Advanced-Lane-Lines-master/camera_cal/calibration5.jpg')
h, w = img2.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h)) # 自由比例参数
dst = cv2.undistort(img2, mtx, dist, None, newcameramtx)
# 根据前面ROI区域裁剪图片
# x, y, w, h = roi
# dst = dst[y:y + h, x:x + w]
cv2.imshow('fin', dst)
cv2.imwrite('./fin.png', dst)
cv2.waitKey()
cv2.destroyAllWindows()# 反投影误差
total_error = 0
for i in range(len(objpoints)):imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)error = cv2.norm(imgpoints[i], imgpoints2, cv2.NORM_L2) / len(imgpoints2)total_error += error
print("total error: ", total_error / len(objpoints))
opencv-python 摄像机标定相关推荐
- Python+OpenCV:摄像机标定(Camera Calibration)
Python+OpenCV:摄像机标定(Camera Calibration) 理论 Some pinhole cameras introduce significant distortion to ...
- 基于opencv的摄像机标定
原理简述: 三维世界中的点的位置与其对应的二维投影,遵从以下公式: 其中, M表示三维世界中的点: [R|T]表示欧氏变换,是一个3*4矩阵 A表示相机参数矩阵,存放相机内部参数 P表示M ...
- 用OpenCV进行摄像机标定
用OpenCV进行摄像机标定 照相机已经存在很长时间了.然而,随着廉价针孔相机在20世纪末的引入,日常生活中变得司空见惯.不幸的是,这种廉价伴随着它的代价:显著的扭曲.幸运的是,这些常数,通过校准和一 ...
- 【OpenCV】摄像机标定+畸变校正
摄像机标定 本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行校正后的显示. 首先关于校正的基本知识通过OpenCV官网的介绍即可简单了解: http://docs.opencv ...
- [OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII
部分 VII 摄像机标定和 3D 重构 OpenCV-Python 中文教程(搬运)目录 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参数,对畸变图像进行 ...
- OpenCV-Python] OpenCV 中摄像机标定和 3D 重构 部分 VII
https://www.cnblogs.com/Undo-self-blog/p/8448500.html 42 摄像机标定 目标 • 学习摄像机畸变以及摄像机的内部参数和外部参数 • 学习找到这些参 ...
- Python+OpenCV学习(17)---摄像机标定
Python+OpenCV学习(17)---摄像机标定 原文:http://blog.csdn.net/firemicrocosm/article/details/48594897 利用python学 ...
- 多摄像机标定和去畸变
Table of Contents 1.kalibr多摄像机标定 1.1 系统安装,环境配置:实测Ubuntu 16.04 1.2 多摄像机标定 2.OpenCV双目标定 3.Matlab多摄像机标定 ...
- 三维重建 - 摄像机标定和立体匹配中极线约束方法
摘自http://www.ahcit.com/lanmuyd.asp?id=2677,以作备录,若有版本问题,请告知. 关于摄像机标定和立体匹配中极线约束方法方面,描述的比较清楚. 一种基于OpenC ...
- opencv 双目摄像头标定
我用的是opencv官方的例程,花了一天把代码大致注释了下,但是双目感觉好难,很多地方都不懂,都是在大佬们的博客找的资料 下面是对例程使用的说明 http://blog.csdn.net/t24755 ...
最新文章
- linux下的加密解密学习
- 若依前后端分离版怎样根据数据库生成代码并快速实现某业务的增删改查
- Git 的安装与初次使用 —— Git 学习笔记 03
- ITK:创建派生内核DerivativeKernel
- Django日志信息路径的设置
- 20220208--CTF MISC-- BUUCTF--二维码 1--binwalk-john-(工具的使用:分析文件/暴力破解压缩包密码)
- 厦门大学计算机学硕复试,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
- 2020年,我们该如何学习WEB 前端开发
- Win10电脑如何定时关机
- linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
- matlab 力学,力学专业程序实践:用MATLAB解决力学问题的方法与实例
- 计算机id换系统会变吗,小雷问答丨手机恢复出厂设置后会变成最原始的系统吗?...
- oracle同义词对象,oracle数据库对象-同义词
- linux上的离线地图,离线地图接入指南
- 谁挡道就骂谁,这个暴躁版扫地机器人火了,东北话也可以,网友:想劈了它...
- 简化版SAAS——业务开单选择材料,选择的是库存是40的货品,实际出库的是-38的货品
- 推荐几本这个系列封面的编程书,涉及Python、计算机图形学、Linux
- ORACLE修改processes和sessions参数
- JS时间戳转YY-MM-DD
- iOS 10权限设置