01.相机参数标定+透视变换

  1. 使用提供的02.摄像头内外参数标定.pdf文档,得到相机的参数。

  2. 然后,按照下图对参数进行修改

3.使用matlab的相机标定得到标定参数Dist和K,然后得到H,进行透视变换

# -*- coding:utf-8 _*-
"""
@Author  : 马祥
@Time    : 2022/05/08
"""
import cv2
import matplotlib.pyplot as plt
import numpy as npnp.set_printoptions(suppress=True, precision=4)Dist = np.array([-0.36219,0.1660,-0.00005,-0.00131,0.00000 ], dtype=np.float32)
K = np.array([[393.67988, 0, 249.34451],[0, 394.10789, 120.61648],[0, 0, 1]], dtype=np.float32)PointsImg = np.array([[162, 209],   # 左上角点开始,顺时针[276, 209],[293, 242],[136, 242.]], dtype=np.float32)# 世界坐标系、地面坐标系, 小车右侧是x,前方是y,向上是z, 坐标系原点设在光心在地面投影左移500mm的位置
distance = 150
PointsWorld = np.array([[429.99998903,249.99997399],[570.00001877,250.00000586],[570.0001411 ,150.00003663],[430.00010819,150.00004694]], dtype=np.float32)Img = cv2.imread('0000.jpg', 0)fig = plt.figure('Ori Image')#原始显示
plt.imshow(Img,'gray')
plt.scatter(PointsImg[:, 0], PointsImg[:, 1])#四个点像素坐标显示
plt.show()
#亚像素点提取
SubPointsImg = cv2.cornerSubPix(Img, PointsImg.copy(), (3, 3), (-1, -1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 300, 0.0001))
#对四个角点畸变矫正
SubPointsImg = cv2.undistortPoints(SubPointsImg.reshape(-1, 1, 2), K, Dist)
#计算单应矩阵
SubPointsImgH = cv2.convertPointsToHomogeneous(SubPointsImg).reshape(-1, 3)
SubPointsImg = K.dot(SubPointsImgH.T).T[:, 0:2]
H = cv2.getPerspectiveTransform(SubPointsImg, PointsWorld)
print(H)
#对整个图像进行畸变矫正
UndistImg = cv2.undistort(Img, K, Dist)plt.imshow(UndistImg,'gray')
plt.scatter(SubPointsImg[:, 0], SubPointsImg[:, 1])
plt.show()#验证单应矩阵
SubPointsImgH=cv2.convertPointsToHomogeneous(SubPointsImg)[:,0,:]
WarpToWord = H.dot(SubPointsImgH.T).T  # H将图像点转换为世界坐标系下的点
print(cv2.convertPointsFromHomogeneous(WarpToWord)[:, 0, :])#图像映射
WarpedImg = cv2.warpPerspective(UndistImg, H, (1000, 1000))  #
plt.imshow(WarpedImg)
# plt.gca().invert_yaxis()
plt.show()


[[ -0.8288 -4.1678 710.4997]
[ 0.0579 0.7031 -338.5836]
[ 0. -0.0081 1. ]]

[[430.     250.    ][570.     250.    ][570.0001 150.    ][430.0002 150.0001]]

使用自己的的车道线图片测试

# for ImgPath in ImgPaths:
ImgPath='00.jpg'
print(ImgPath)
Img = cv2.imread(ImgPath)
UndistImg = cv2.undistort(Img, K, Dist)
WarpedImg = cv2.warpPerspective(UndistImg, H, (1000, 1000))
# plt.imshow(WarpedImg)
#   # plt.show()
# SavePath = ImgPath.replace('JPEGImages', 'WarpedImg')
# os.makedirs(os.path.dirname(SavePath), exist_ok=True)
SavePath='84n.jpg'
cv2.imwrite(SavePath, WarpedImg)
Img=cv2.cvtColor(Img,cv2.COLOR_BGR2RGB)
plt.imshow(Img)
# plt.gca().invert_yaxis()
plt.show()
WarpedImg=cv2.cvtColor(WarpedImg,cv2.COLOR_BGR2RGB)
plt.imshow(WarpedImg)
# plt.gca().invert_yaxis()
plt.show()


相机参数标定+透视变换相关推荐

  1. 相机参数标定(camera calibration)及标定结果如何使用

    重要更新:本文的第二次更新已发布.为了不破坏现有内容的结构,故重新开始新的一篇文章.同时本文的一些内容也会涵盖进去. 欢迎关注. <第二更,相机参数标定基础:从小孔成像开始到单双目标定> ...

  2. 计算机视觉-相机参数标定

    相机参数标定 针孔照相机模型 照相机矩阵 相机参数标定 多种实验结果 总结 主代码 针孔照相机模型 针孔照相机模型是计算机视觉中广泛使用的照相机模型. 在针孔照相机模型中,光线投影到图像平面之前,从唯 ...

  3. 相机参数标定:张正友标定法

    一.镜头畸变: 用广角镜头拍摄的特写照片,其中被摄对象的鼻子与面部的其它器官相比会显得出奇的大.这就是用广角镜头拍摄的很多照片所具有的一种透视畸变形式的特征. 这种失真发生的原因其实就是透视,正常透视 ...

  4. opencv基础:相机参数标定(camera calibration)及标定结果如何使用

    1.关于坐标系旋转和物体旋转对应的旋转矩阵差别 相关参考:https://blog.csdn.net/tangyongkang/article/details/5484636 注意旋转方向导致的旋转角 ...

  5. 使用camera_calibration对xtion pro live深度相机进行参数标定,rosdep install camera_calibration报错Rosdep cannot find

    在图像处理中,一般都涉及相机参数标定,但网上看了好多博客中相机标定步骤挺复杂的,所以特来记录.本文使用的ubuntu系统.ROS Kinetic, xtion深度相机, 使用camera_calibr ...

  6. 计算机视觉学习6_棋盘格_相机模型与参数标定

    文章目录 为什么要进行相机参数标定 相机内参矩阵原理 相机标定方法--Recap: 相机标定 张正友标定法 相机模型 计算单应性矩阵H 计算内参数矩阵 计算外部参数 实验(matlab实现) 为什么要 ...

  7. Python OpenCV相机参数详解:实现准确的相机标定和图像处理

    Python OpenCV相机参数详解:实现准确的相机标定和图像处理 在计算机视觉领域,相机参数是非常重要的元素.通过相机参数的标定,可以将图像中的像素坐标转化为真实世界中的坐标,从而实现准确的图像处 ...

  8. 标定学习笔记(九)-- 利用空间正交约束的相机自标定和三维重建

    本文主要内容围绕西交大的舒远.谈正和丁礼如所提出的一种利用空间正交约束的相机自标定方法进行归纳概述,谨做学习用.文章提出了一种用 2 幅存在正交约束的场景图像进行三维重建的方法,该方法不需要事先标定相 ...

  9. 六轴机械臂与单目相机的标定和视觉伺服的理解

    参考: 六轴机械手与相机的手眼标定https://blog.csdn.net/Isaac320/article/details/80078579 最详细.最完整的相机标定讲解https://blog. ...

  10. 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangdashi888/article/details/51356385 1. 相机参数是三种不同的 ...

最新文章

  1. 虚拟化方案应用场景及优劣
  2. 编程之美-俄罗斯方块游戏方法整理
  3. 2017java最新面试题_2017年最新java面试题及答案
  4. 微软开源Reactive Extensions
  5. 9.整型安全操作.rs
  6. LiveVideoStack 2020 年度盘点
  7. 解决Too many open files问题
  8. Qt学习笔记-自绘时钟
  9. 基于JAVA+SpringBoot+Mybatis+Vue+MYSQL的在线考试系统
  10. shell脚本(四)
  11. Java-JavaMail邮件开发(1)Java Mail
  12. 点石成金 访客至上的Web和移动可用性设计秘笈pdf
  13. 三星Cortex-A53八核6818核心板
  14. 51单片机数码管显示历史键值
  15. 移远BC28_opencpu方案_pin脚分配
  16. 使用 MyBatis 的 Maven 插件生成代码
  17. 时间加减计算器_FRM计算器使用流程你知道吗?
  18. 阿里云拨测:主动探测Web应用质量,助力提升用户体验
  19. agent开发之oneAgent
  20. 供需关系——需求与满意度

热门文章

  1. 高防CDN为什么会被TTCDN取代的?
  2. 搭建多节点以太坊私链 10分钟搞定(超简洁)
  3. markdown特殊符号语法
  4. 5G 网络的移动性管理上下文对比介绍
  5. 高德地图Amap绘制路线首尾相连问题
  6. 随机存取存储器(RAM)的最大特点是什么?
  7. Android 高级自定义Toast及源码解析
  8. ​元宇宙与AI热度不减,Gartner 2023 年十大战略技术趋势完整解析
  9. [OOAD]面向对象分析与设计之人机交互界面设计学习总结
  10. 求多个数的最大公因数和最小公倍数