目的:

  1. 实现相机标定,得到相机的内参以及畸变旋转参数等
  2. 尝试矫正由相机产生的图像畸变

代码:

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实现广角相机标定和图像畸变矫正相关推荐

  1. Python+OpenCV:摄像机标定(Camera Calibration)

    Python+OpenCV:摄像机标定(Camera Calibration) 理论 Some pinhole cameras introduce significant distortion to ...

  2. 基于python+OpenCV的车牌号码识别

    基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...

  3. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  4. Python+OpenCV相机摄像头标定,矫正畸变,实时输出正常视频流

    搞了个摄像头,拍摄有畸变,拍摄出的直线是弧线形状,类似于鱼眼相机,需要正常输出,遂使用OpenCV进行相机标定 1.畸变参数的提取 大哥用MATLAB提取的畸变内参和畸变系数,用来矫正,我不会,此博客 ...

  5. Python+OpenCV图像处理(五)——图像阈值和二值化

    系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...

  6. 基于Python+OpenCV车道线检测(直道和弯道)

    基于Python+OpenCV车道线检测(直道和弯道) 基于Python+OpenCV车道线检测(直道和弯道)

  7. 【开源分享】基于Python+OpenCV+PyQt5车牌识别(GUI界面)

    亲测无错:基于Python+OpenCV+PyQt5车牌识别(GUI界面)绝对可以用的!!!!! 基于Python+OpenCV+PyQt5车牌识别(GUI界面) 参考文档

  8. 图像畸变矫正——透视变换

    图像畸变矫正--透视变换 由于相机制造精度以及组装工艺的偏差引入的畸变,或者由于照片拍摄时的角度.旋转.缩放等问题, 可能会导致原始图像的失真,如果要修复这些失真,我们可以通过透视变换,对图像进行畸变 ...

  9. (十三)图像畸变矫正

    图像畸变矫正 针孔相机模型不考虑镜头畸变,因为一个理想的针孔相机没有镜头.但是由于相机的结构中存在着一些光学透镜,导致成像后的图像发生了扭曲,原本直立的高楼变得扭曲. 一.图像畸变原因 图像畸变的原因 ...

最新文章

  1. [SDOI2009]HH的项链
  2. 职场观察:高薪需要什么?
  3. 企业信息化所面临的问题
  4. 013_Redis的主从模式
  5. SD初始化过程以及Cmd解析
  6. Ajax — 新闻列表
  7. Google Mesa概览
  8. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
  9. java map 多个值_java 一个函数EnumMap返回多个值
  10. 盘点提高程序员技术的5个免费编程网站,你知道几个?
  11. Gym 101128A :Promotions (Southwestern Europe Regional Contest )
  12. ZOJ 1242 Carbon Dating
  13. 在Linux下禁用IPv6的方法小结
  14. 超实用的JavaScript代码段 Item1 --倒计时效果
  15. linux su,sudo命令
  16. 190511每日一句
  17. 大数据十大核心原理(互联网上整理)
  18. ONMF正交非负矩阵分解·论文总结
  19. (超详细)手把手教你在安卓手机上搭建服务器和网站
  20. Android Room 数据实体类详解

热门文章

  1. Python入门100题 | 第073题
  2. 力扣(leetcode)-1. 两数之和
  3. 通用前端监控采集脚本
  4. 从 ELK 到 EFK 演进
  5. Java7里try-with-resources分析--转
  6. Java获取真实的IP地址--转载
  7. 【ETL】ETL----如何决定是否采用ETL工具
  8. 3. Nest Provider
  9. Hyperledger Besu企业以太坊快速教程
  10. 主要推荐系统算法总结及Youtube深度学习推荐算法实例概括