基于python opencv实现广角相机标定和图像畸变矫正
目的:
- 实现相机标定,得到相机的内参以及畸变旋转参数等
- 尝试矫正由相机产生的图像畸变
代码:
import cv2 as cv
import numpy as np
import glob
import os#循环中断
criteria=(cv.TERM_CRITERIA_EPS+cv.TERM_CRITERIA_MAX_ITER,30,0.001)#标定板交叉点的个数
row=6
column=4
objp=np.zeros((row*column,3),np.float32)
objp[:,:2]=np.mgrid[0:row,0:column].T.reshape(-1,2)objpoints=[] #实际空间3D点
imgpoints=[] #图像中2D点#批量读取图片
images=glob.glob('D:\\python\\photos\\chess\\*.jpg') for fname in images:img=cv.imread(fname)gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)#找标定板角点ret,corners=cv.findChessboardCorners(gray,(row,column),None)if ret==True:objpoints.append(objp)corners2=cv.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)imgpoints.append(corners2)#标定相机
ret,Matrix,dist,rvecs,tvecs=cv.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None)datadir="D:\\python\\photos\\chess\\"path=os.path.join(datadir)
img_list=os.listdir(path)for i in img_list:img=cv.imread(os.path.join(path,i))h,w=img.shape[:2] newMatrix, roi = cv.getOptimalNewCameraMatrix(Matrix, dist, (w,h), 1, (w,h)) #矫正图像dst = cv.undistort(img, Matrix, dist, None, newMatrix)cv.imwrite('D:\\python\\practice\\photos\\calibrated\\'+i,dst)#计算重投影误差
tot_error = 0
for i in range(len(objpoints)):imgpoints2, _ = cv.projectPoints(objpoints[i], rvecs[i], tvecs[i], Matrix, dist)error = cv.norm(imgpoints[i],imgpoints2, cv.NORM_L2)/len(imgpoints2)tot_error += error#输出参数
print('ret:\n',ret)
print('mtx:\n',Matrix)
print('dist:\n',dist)
print('rvecs:\n',rvecs)
print('tvecs:\n',tvecs)
print ("total error: ", tot_error/len(objpoints))
欢迎关注公众号:算法工程师的学习日志
基于python opencv实现广角相机标定和图像畸变矫正相关推荐
- Python+OpenCV:摄像机标定(Camera Calibration)
Python+OpenCV:摄像机标定(Camera Calibration) 理论 Some pinhole cameras introduce significant distortion to ...
- 基于python+OpenCV的车牌号码识别
基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...
- 基于python opencv人脸识别的签到系统
基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...
- Python+OpenCV相机摄像头标定,矫正畸变,实时输出正常视频流
搞了个摄像头,拍摄有畸变,拍摄出的直线是弧线形状,类似于鱼眼相机,需要正常输出,遂使用OpenCV进行相机标定 1.畸变参数的提取 大哥用MATLAB提取的畸变内参和畸变系数,用来矫正,我不会,此博客 ...
- Python+OpenCV图像处理(五)——图像阈值和二值化
系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...
- 基于Python+OpenCV车道线检测(直道和弯道)
基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)
- 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)
亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档
- 图像畸变矫正——透视变换
图像畸变矫正--透视变换 由于相机制造精度以及组装工艺的偏差引入的畸变,或者由于照片拍摄时的角度.旋转.缩放等问题, 可能会导致原始图像的失真,如果要修复这些失真,我们可以通过透视变换,对图像进行畸变 ...
- (十三)图像畸变矫正
图像畸变矫正 针孔相机模型不考虑镜头畸变,因为一个理想的针孔相机没有镜头.但是由于相机的结构中存在着一些光学透镜,导致成像后的图像发生了扭曲,原本直立的高楼变得扭曲. 一.图像畸变原因 图像畸变的原因 ...
最新文章
- [SDOI2009]HH的项链
- 职场观察:高薪需要什么?
- 企业信息化所面临的问题
- 013_Redis的主从模式
- SD初始化过程以及Cmd解析
- Ajax — 新闻列表
- Google Mesa概览
- # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
- java map 多个值_java 一个函数EnumMap返回多个值
- 盘点提高程序员技术的5个免费编程网站,你知道几个?
- Gym 101128A :Promotions (Southwestern Europe Regional Contest )
- ZOJ 1242 Carbon Dating
- 在Linux下禁用IPv6的方法小结
- 超实用的JavaScript代码段 Item1 --倒计时效果
- linux su,sudo命令
- 190511每日一句
- 大数据十大核心原理(互联网上整理)
- ONMF正交非负矩阵分解·论文总结
- (超详细)手把手教你在安卓手机上搭建服务器和网站
- Android Room 数据实体类详解