我使用本教程link成功校准了我的相机作为参考 . 这是代码:

CHESSBOARD_SIZE = (9,6)

img_dir_left = "/home/dir_left"

img_dir_right = "/home/dir_right"

criteria = (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1)

calib_flags = cv2.fisheye.CALIB_RECOMPUTE_EXTRINSIC+cv2.fisheye.CALIB_CHECK_COND+cv2.fisheye.CALIB_FIX_SKEW

objp = np.zeros((1, CHESSBOARD_SIZE[0]*CHESSBOARD_SIZE[1], 3), np.float32)

objp[0,:,:2] = np.mgrid[0:CHESSBOARD_SIZE[0], 0:CHESSBOARD_SIZE[1]].T.reshape(-1, 2)

def calculate(imgDir):

imgPath = glob.glob(imgDir+'/*jpg')

img_size = None

objpoints = []

imgpoints = []

for image in sorted(imgPath):

img = cv2.imread(image)

if img_size == None:

img_size = img.shape[:2]

else:

assert img_size == img.shape[:2], "All images must share the same size."

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ret, corners = cv2.findChessboardCorners(gray, CHESSBOARD_SIZE, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE)

if ret:

objpoints.append(objp)

cornersM = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)

imgpoints.append(cornersM)

cv2.drawChessboardCorners(img, CHESSBOARD_SIZE, cornersM, ret)

cv2.imshow(imgDir, img)

cv2.waitKey(1)

return objpoints, imgpoints, img_size, gray

def calibrate(objpoints, imgpoints, img_size, gray):

img_number = len(objpoints) #number of the pictures

K = np.zeros((3, 3))

D = np.zeros((4, 1))

rvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(img_number)]

tvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(img_number)]

print("rvecs", rvecs)

rms, _, _, _, _ = cv2.fisheye.calibrate(objpoints,imgpoints,gray.shape[::-1],K,D,rvecs,tvecs,calib_flags,

(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))

print("RMS", rms)

print("Found " + str(img_number) + " valid images for calibration")

print("DIM=" + str(img_size[::-1]))

print("K=np.array(" + str(K.tolist()) + ")", )

print("D=np.array(" + str(D.tolist()) + ")\n", )

dimension = img_size[::-1]

k = K.tolist()

d = D.tolist()

return dimension , k , d

我同时拍摄了13张图像 . 图像从原始10位状态转换为8位 . 摄像机安装在7厘米基线的同一线路上 . 我的RMS_left是0.509,RMS_right是0.341 .

这是我用来从相机中取消分配帧的功能 .

def undistorted(frame, data):

data_in = data

img = frame

K, D, DIM = data_in['K'], data_in['D'], data_in['DIM']

K = np.array(K)

D = np.array(D)

map1, map2 = cv2.fisheye.initUndistortRectifyMap(K, D, np.eye(3), K, DIM, cv2.CV_16SC2)#cv2.CV_16SC2

undistorted_frame = cv2.remap(img, map1, map2, interpolation=cv2.INTER_LINEAR, borderMode=cv2.BORDER_TRANSPARENT, borderValue=29)

return undistorted_frame

当我尝试进行鱼眼立体声校准时,我得到了与此github link中描述的相同的错误 . 但是所有错误都有一个解决方法 .

K_left = np.zeros((3, 3))

D_left = np.zeros((4, 1))

K_right = np.zeros((3, 3))

D_right = np.zeros((4, 1))

R = np.zeros((1, 1, 3), dtype=np.float64)

T = np.zeros((1, 1, 3), dtype=np.float64)

N_OK = len(imgpoints_left)

objp = np.zeros( (CHECKERBOARD[0]*CHECKERBOARD[1], 1, 3) , np.float64)

objp[:,0, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)

objpoints = np.array([objp]*len(imgpoints_left),dtype=np.float64)

imgpoints_left = np.asarray(imgpoints_left, dtype=np.float64)

imgpoints_right = np.asarray(imgpoints_right, dtype=np.float64)

objpoints = np.reshape(objpoints, (N_OK, 1, CHECKERBOARD[0]*CHECKERBOARD[1], 3))

imgpoints_left = np.reshape(imgpoints_left, (N_OK, 1, CHECKERBOARD[0]*CHECKERBOARD[1], 2))

imgpoints_right = np.reshape(imgpoints_right, (N_OK, 1, CHECKERBOARD[0]*CHECKERBOARD[1], 2))

(rms, K_left, D_left, K_right, D_right, R, T) = \

cv2.fisheye.stereoCalibrate(

objpoints,

imgpoints_left,

imgpoints_right,

K_left,

D_left,

K_right,

D_right,

img_size,

R,

T,

calibration_flags

)

有人可以帮我澄清这个解决方法,我是OpenCV的新手,可以完全理解它 .

java 鱼眼照片的矫正_鱼眼镜头立体声校准OpenCV,Python相关推荐

  1. java 鱼眼照片的矫正_使用OpenCV校准鱼眼镜头

    使用 01.简介 当我们使用的鱼眼镜头视角大于160°时, 如果小伙伴也遇到了类似情况,那么这篇文章可能会对大家有一定的帮助. 从3.0版开始,OpenCV包含了cv2.fisheye可以很好地处理鱼 ...

  2. java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...

    遇见 Tablib 我们在 Python 实际开发过程中,经常涉及将数据导出为 Excel.Csv.Yaml.Json 等各种格式的文件的需求,一些粗鲁的实现方式是通过安装各种第三方模块以支持不同格式 ...

  3. 怎么用java做全民飞机大战_基于VC++和OpenCV实现的全民飞机大战游戏

    摘要 功能:利用C++语言完成了一个小游戏项目-全民飞机大战,该游戏首先能够给用户提供注册,登录功能:提供了菜单栏及两种游戏模式,一种是无尽模式,另一种是一般模式:一般模式中用户通过控制玩家飞机攻击敌 ...

  4. java周志第二周_20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算

    20165325 2017-2018-2 <Java程序设计>结对编程_第二周:四则运算 一.码云链接 1.Git提交日志已经实现一个功能/一个bug修复的注释说明,如图所示: 2.测试代 ...

  5. 一文讲透鱼眼相机畸变矫正,及目标检测项目应用

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1 个人介绍 大家好,我是潘大强. 目前博士毕业4年,主要从事智能安防行业. 之前也分享过AI从业的一 ...

  6. opencv使用经纬法把鱼眼照片展开

    前两天工作需要买了一个佳能8-15mm的鱼眼镜头,8mm镜头其实成像就是180度的鱼眼镜头,成像效果如下图: 这里因为买的相机body是全画幅的,CCD长宽比是3:2的,所以调至镜头到8mm是不能占满 ...

  7. Java获取照片的Exif信息,并解析GPS

    Java获取照片的Exif信息,并解析GPS 1. 效果图 2. 什么是Exif? 3. 源代码 参考 ❤️ 这篇博客将介绍什么EXIF,以及如何用Java语言读取Exif信息,并转换经纬度为位置信息 ...

  8. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  9. JAVA编程习题及答案_完美版

    JAVA编程习题及答案_完美版 原创 lingwu7 最后发布于2017-08-15 20:01:12 阅读数 10796 收藏 发布于2017-08-15 20:01:12 版权声明:本文为博主原创 ...

最新文章

  1. 【算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)
  2. GWT与Eclipse集成开发初步研究
  3. Hibernate-注解-实体类
  4. 8.15 号 程序 循环结构作业的代码
  5. 浏览器缓存之Expires Etag Last-Modified max-age详解
  6. 阿里云徐栋:“下一代互联网”三大技术趋势
  7. 在.net中序列化读写xml方法的总结
  8. 页面加载完后直接弹窗或者跳转页面
  9. VSCode改变字体颜色
  10. android音乐加速软件,音乐变速器app
  11. 后院失火的大疆,距离真正的巨头还有多远?
  12. 改善客户服务体验的 5 种方法
  13. mac bookpro m1 笔记本关闭键盘屏幕 禁用键盘屏幕使用 键盘屏幕误触 Touch Bar禁用 禁用MacBook-Pro的触摸栏
  14. 计算机怎么移动游戏,Uplay游戏怎么搬移 Uplay游戏搬移方法介绍
  15. 计算机毕业设计论文不会做怎么办?这里送教程送代码送开题送答辩
  16. ARMv7和ARMv8架构比较
  17. MySQL Overview
  18. 目标检测——数据获取和标注(一)
  19. keil如何添加STM32系列
  20. 升职加薪/积分落户必备职称——2020年中级经济师不容错过

热门文章

  1. 简单粗暴的学习计划表,希望自己能够坚持!
  2. java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档
  3. 10张图带你彻底搞懂什么是限流、熔断、服务降级
  4. 在word中编辑目录的时候莫名其妙会出现一个折叠标题
  5. h5页面嵌套iframe标签
  6. 谈客户如同谈恋爱,分析一下你为什么失恋?
  7. 计算机数据传输9600波特率,什么是波特率_波特率9600是什么意思_串口通信为什么要设置波特率?...
  8. 华为mate40pro和小米10pro哪个好-华为mate40pro和小米10pro对比-华为mate40pro和小米10pro像素 那个好
  9. 前端流行的三种布局详解
  10. 数据库建表语句改成数据字典到word