返回顶部
首页 > 资讯 > 精选 >OpenCV实现相机校正的方法
  • 890
分享到

OpenCV实现相机校正的方法

2023-06-15 03:06:07 890人浏览 薄情痞子
摘要

这篇文章主要介绍OpenCV实现相机校正的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1. 相机标定根据张正友校正算法,利用棋盘格数据校正对车载相机进行校正,计算其内参矩阵,外参矩阵和畸变系数。标定

这篇文章主要介绍OpenCV实现相机校正的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

1. 相机标定

根据张正友校正算法,利用棋盘格数据校正对车载相机进行校正,计算其内参矩阵,外参矩阵和畸变系数。

标定的流程是:

  • 准备棋盘格数据,即用于标定的图片

  • 对每一张图片提取角点信息

  • 在棋盘上绘制提取到的角点(非必须,只是为了显示结果)

  • 利用提取的角点对相机进行标定

  • 获取相机的参数信息

2.关于相机校正用到的几个api

1、寻找棋盘图中的棋盘角点

rect, corners = cv2.findChessboardCorners(image, pattern_size, flags)

参数:

  • Image: 输入的棋盘图,必须是8位的灰度或者彩色图像

  • Pattern_size:棋盘图中每行每列的角点个数(内角点)。

  • flags: 用来定义额外的滤波步骤以有助于寻找棋盘角点。所有的变量都可以单独或者以逻辑或的方式组合使用。取值主要有:

      CV_CALIB_CB_ADAPTIVE_THRESH :使用自适应阈值(通过平均图像亮度计算得到)将图像转换为黑白图,而不是一个固定的阈值。

        CV_CALIB_CB_NORMALIZE_IMAGE :在利用固定阈值或者自适应的阈值进行二值化之前,先使用cvNormalizeHist来均衡化图像亮度。

        CV_CALIB_CB_FILTER_QUADS :使用其他的准则(如轮廓面积,周长,方形形状)来去除在轮廓检测阶段检测到的错误方块。

返回:

  • Corners:检测到的角点

  • rect: 输出是否找到角点,找到角点返回1,否则返回0

2、检测完角点之后可以将测到的角点绘制在图像上,使用的API是:

cv2.drawChessboardCorners(img, pattern_size, corners, rect)

参数:

  • Img: 预绘制检测角点的图像

  • pattern_size : 预绘制的角点的形状

  • corners: 角点矩阵

  • rect: 表示是否所有的棋盘角点被找到,可以设置为findChessboardCorners的返回值

注意:如果发现了所有的角点,那么角点将用不同颜色绘制(每行使用单独的颜色绘制),并且把角点以一定顺序用线连接起来。

3利用定标的结果计算内外参数

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(object_points, image_points, image_size, None, None)

参数:

  • Object_points:世界坐标系中的点,在使用棋盘的场合,令z的坐标值为0,而x,y坐标用里面来度量,选用英寸单位,那么所有参数计算的结果也是用英寸表示。最简单的方式是定义棋盘的每一个方块为一个单位。

  • image_points:在图像中寻找到的角点的坐标,包含object_points所提供的所有点

  • image_size: 图像的大小,以像素为衡量单位

返回:

  • ret: 返回值

  • mtx: 相机的内参矩阵,大小为3*3的矩阵

  • dist: 畸变系数,为5*1大小的矢量

  • rvecs: 旋转变量

  • tvecs: 平移变量

2.1 图像去畸变

上一步中得到相机的内参及畸变系数,利用其进行图像的去畸变,最直接的方法就是调用opencv中的函数得到去畸变的图像:

def img_undistort(img, mtx, dist):    dst = cv2.undistort(img, mtx, dist, None, mtx)    return dst

求畸变的API:

dst = cv2.undistort(img, mtx, dist, None, mtx)

参数:

  • Img: 要进行校正的图像

  • mtx: 相机的内参

  • dist: 相机的畸变系数

返回:

  • dst: 图像校正后的结果

3. 相机校正

import cv2import numpy as npimport matplotlib.pyplot as pltimport matplotlib.image as mpimgimport globdef plot_contrast_imgs(origin_img, converted_img, origin_img_title="origin_img", converted_img_title="converted_img", converted_img_gray=False):    """    用于对比显示两幅图像    """    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 20))    ax1.set_title(origin_img_title)    ax1.imshow(origin_img)    ax2.set_title(converted_img_title)    if converted_img_gray==True:        ax2.imshow(converted_img, cmap="gray")    else:        ax2.imshow(converted_img)    plt.show()# 1. 参数设定:定义棋盘横向和纵向的角点个数并指定校正图像的位置nx = 9ny = 6file_paths = glob.glob("./camera_cal/calibration*.jpg")# 2. 计算相机的内外参数及畸变系数def cal_calibrate_params(file_paths):    object_points = []  # 三维空间中的点:3D    image_points = []   # 图像空间中的点:2d    # 2.1 生成真实的交点坐标:类似(0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)的三维点    objp = np.zeros((nx * ny, 3), np.float32)    objp[:, :2] = np.mgrid[0:nx, 0:ny].T.reshape(-1, 2)    # 2.2 检测每幅图像角点坐标    for file_path in file_paths:        img = cv2.imread(file_path)        # 将图像转换为灰度图        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)        # 自动检测棋盘格内4个棋盘格的角点(2白2黑的交点)        rect, corners = cv2.findChessboardCorners(gray, (nx, ny), None)        # 若检测到角点,则将其存储到object_points和image_points        if rect == True:            object_points.append(objp)            image_points.append(corners)    # 2.3 获取相机参数    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(object_points, image_points, gray.shape[::-1], None, None)    return ret, mtx, dist, rvecs, tvecsdef img_undistort(img, mtx, dist):    """    图像去畸变    """    return cv2.undistort(img, mtx, dist, None, mtx)# 测试去畸变函数的效果file_paths = glob.glob("./camera_cal/calibration*.jpg")ret, mtx, dist, rvecs, tvecs = cal_calibrate_params(file_paths)if mtx.any() != None:  # a.any() or a.all()    img = mpimg.imread("./camera_cal/calibration1.jpg")    undistort_img = img_undistort(img, mtx, dist)    plot_contrast_imgs(img, undistort_img)    print("done!")else:    print("failed")

执行代码:

OpenCV实现相机校正的方法

以上是“OpenCV实现相机校正的方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: OpenCV实现相机校正的方法

本文链接: https://lsjlt.com/news/277058.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • OpenCV实现相机校正的方法
    这篇文章主要介绍OpenCV实现相机校正的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1. 相机标定根据张正友校正算法,利用棋盘格数据校正对车载相机进行校正,计算其内参矩阵,外参矩阵和畸变系数。标定...
    99+
    2023-06-15
  • OpenCV实现相机校正
    本文实例为大家分享了OpenCV实现相机校正的具体代码,供大家参考,具体内容如下 1. 相机标定 根据张正友校正算法,利用棋盘格数据校正对车载相机进行校正,计算其内参矩阵,外参矩阵和...
    99+
    2024-04-02
  • opencv实现图像校正
    本文实例为大家分享了opencv实现图像校正的具体代码,供大家参考,具体内容如下 1.引言:python实现倾斜图像校正操作 2.思路流程: (1)读入,灰度化;(2)高斯模糊;(3...
    99+
    2024-04-02
  • opencv实现图像倾斜校正
    本文实例为大家分享了opencv实现图像倾斜校正的具体代码,供大家参考,具体内容如下 今天的任务是如图这两种情况,我现在的情况是和如图一样的,左图左边倾斜一点儿,那么我需要把左边压...
    99+
    2022-11-13
    opencv图像倾斜校正 opencv图像校正 opencv倾斜校正
  • OpenCV实现倾斜文字校正
    基于OpenCV的倾斜文字校正,供大家参考,具体内容如下 使用OpenCV里example中的的倾斜文本作为输入,本文的目的即将该倾斜的文本校正成水平方向的文本。 主要思路为: 读取...
    99+
    2022-11-13
    OpenCV倾斜文字校正 OpenCV倾斜校正 OpenCV文字校正
  • OpenCV实现相机标定
    本文实例为大家分享了OpenCV实现相机标定的具体代码,供大家参考,具体内容如下 一、相机与针孔相机模型 1.相机模型 现代科技加持下的相机已经成为制造精密设计巧妙的消费品,相机的光...
    99+
    2024-04-02
  • OpenCV实现相机标定板
    本文实例为大家分享了OpenCV实现相机标定板的具体代码,供大家参考,具体内容如下 1.代码实现 #include <opencv.hpp> #include "h...
    99+
    2024-04-02
  • python中opencv实现图片文本倾斜校正
    本项目为python项目需要安装python及python的opencv模块:opencv_python-4.0.1-cp37-cp37m-win32.whl 和 python的矩阵...
    99+
    2024-04-02
  • OpenCV怎么实现相机标定板
    这篇文章主要介绍OpenCV怎么实现相机标定板,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1.代码实现#include <opencv.hpp>#include &quo...
    99+
    2023-06-14
  • OpenCV实现相机标定示例详解
    目录环境准备相机标定棋盘格图片实时显示相机的画面在线标定实时显示相机画面,按键保存能检测到角点的棋盘格图片离线标定畸变矫正环境准备 vs2015+opencv4.10安装与配置 相机...
    99+
    2024-04-02
  • SpringBoot实现优雅停机的正确方法
    目录一、介绍二、方案实践2.1 方法一 通过Actuator的Endpoint机制关闭服务2.2 方法二 使用ApplicationContext的close方法关闭服务2.3 方法...
    99+
    2023-01-30
    SpringBoot实现优雅停机 SpringBoot优雅停机 SpringBoot停机
  • 使用ntpdate工具校正linux服务器时间(实现方法)
    当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210.72...
    99+
    2022-06-04
    服务器 时间 工具
  • opencv实现机器视觉检测和计数的方法
    引言 在机器视觉中,有时需要对产品进行检测和计数。其难点无非是对于产品的图像分割。 由于之前网购的维生素片,有时候忘了今天有没有吃过,就想对瓶子里的药片计数...在学习opencv以...
    99+
    2024-04-02
  • OpenCV 图像梯度的实现方法
    目录概述梯度运算礼帽黑帽Sobel 算子计算 x计算 y计算 x+y融合概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 Op...
    99+
    2024-04-02
  • OpenCV实现对象跟踪的方法
    介绍 OpenCV 是一个很好的处理图像和视频的工具。无论你是想让你的照片呈现 90 年代的黑白效果,还是执行复杂的数学运算,OpenCV 都可以随时为你服务。 如果你对计算机视觉感...
    99+
    2024-04-02
  • 详解ubuntu安装opencv的正确方法
    本文介绍的是如何安装ubuntu下C++接口的opencv 1.安装准备: 1.1安装cmake sudo apt-get install cmake 1.2依赖环境 sudo apt-get instal...
    99+
    2022-06-04
    ubuntu安装opencv ubuntu opencv安装
  • 校正Win10系统屏幕颜色的方法
    我们有时会因为一些特殊的原因开始改变屏幕的颜色,让用户看起来很不舒服,那么Win10应该如何纠正屏幕的颜色呢?让我们来看看Win10系统屏幕颜色的校正方法。打开鼠标右键桌面空白处显示设置窗口。点击显示栏右侧的高级显示设置按钮。点击颜色校准按...
    99+
    2023-07-16
  • ECshop商品相册显示顺序为正序实现方法
    我在使用ECshop中当更改商品图片后,这张图片就会置于商品相册的最后一个,于是前台显示放大图就会于相册第一张不同。修改方法很简单: 找到include/lib_goods.php文件中“获得指定商品的相册&...
    99+
    2022-06-12
    商品相册 正序
  • OpenCV实现简易标定板的方法
    这篇文章给大家分享的是有关OpenCV实现简易标定板的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文实例为大家分享了OpenCV实现简易标定板的具体代码,供大家参考,具体内容如下使用OpenCV生成标定板...
    99+
    2023-06-14
  • opencv C++模板匹配的实现方法
    这篇文章主要介绍“opencv C++模板匹配的实现方法”,在日常操作中,相信很多人在opencv C++模板匹配的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”opencv&nb...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作