OpenCV(14)-OpenCV4.0中文文档学习2(补充)

这篇具有很好参考价值的文章主要介绍了OpenCV(14)-OpenCV4.0中文文档学习2(补充)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相机校准和3D重建

相机校准

标定

  • findChessboardCorners() 它返回角点和阈值,如果成功找到所有角点,则返回 True。这些角落将按顺序放置(从左到右,从上到下)
  • cornerSubPix()用以寻找图案,找到角点后也可以用其来提高它们的准确性
  • drawChessboardCorners() 绘制图案
import numpy as np
import cv2 as cv
import glob

# 终止标准
criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# 准备对象点, 如 (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)

# 用于存储所有图像对象点与图像点的矩阵
objpoints = [] # 在真实世界中的 3d 点 
imgpoints = [] # 在图像平面中的 2d 点

images = glob.glob('*.jpg')

for fname in images:
    img = cv.imread(fname)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    # 找到棋盘上所有的角点
    ret, corners = cv.findChessboardCorners(gray, (7,6), None)

    # 如果找到了,便添加对象点和图像点(在细化后)
    if ret == True:
        objpoints.append(objp)

        corners2 = cv.cornerSubPix(gray,corners, (11,11), (-1,-1), criteria)
        imgpoints.append(corners)

        # 绘制角点
        cv.drawChessboardCorners(img, (7,6), corners2, ret)
        cv.imshow('img', img)
        cv.waitKey(500)

cv.destroyAllWindows()

校准

  • calibrateCamera()函数
ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)

矫正

  • getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))根据自由缩放系数细化相机矩阵。

  • 如果缩放参数 alpha = 0,这个函数将返回最小不必要像素的校正图像。所以它甚至可能会移除图像角落的一些像素。如果 alpha = 1,则所有像素都会保留一些额外的黑色图像。此函数还返回图像 ROI,可用于裁剪结果。

  • undistort(img, mtx, dist, None, newcameramtx) 调用这个函数并使用使用上面获得的 ROI 来裁剪结果

# 矫正
dst = cv.undistort(img, mtx, dist, None, newcameramtx)

# 裁切图像
x, y, w, h = roi
dst = dst[y:y+h, x:x+w]
cv.imwrite('calibresult.png', dst)
  • 重映射:首先,找到一个从畸变的图像到矫正过的图像的映射函数。然后使用重映射函数。
# 矫正
mapx, mapy = cv.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w,h), 5)
dst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)

# 裁切图像
x, y, w, h = roi
dst = dst[y:y+h, x:x+w]
cv.imwrite('calibresult.png', dst)

姿势估计

  • 可以绘制2D图像模拟3D效果
  • 绘制坐标系、立方体等

线性几何

  • 两张图使用极线匹配

  • 左边的图像所有的极线都汇聚到右侧图像外的一点。那个汇聚点便是极点。

OpenCV(14)-OpenCV4.0中文文档学习2(补充)

立体图像的深度图

  • 一个场景点的深度是与相应图像点及其相机投影中心的距离差成反比的

  • 创建视差图

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

imgL = cv.imread('tsukuba_l.png',0)
imgR = cv.imread('tsukuba_r.png',0)

stereo = cv.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

OpenCV(14)-OpenCV4.0中文文档学习2(补充)

K-Means聚类

  • kmeans()函数进行数据聚类
  • 输入参数:
    • samples : 应该是 np.float32 数据类型,并且每个功能都应该放在一个列中。
    • nclusters(K) : 结束时所需的集群数量
    • criteria: 迭代终止标准。满足此条件时,算法迭代停止。实际上,这是一个有 3 个元素的 tuple。它们是( type, max_iter, epsilon ):
      1. 终止标准的类型。 它有 3 个标志如下:
        • cv.TERM_CRITERIA_EPS - 如果达到指定的精度 epsilon,则停止算法迭代。
        • cv.TERM_CRITERIA_MAX_ITER - 在指定的迭代次数 max_iter 之后停止算法。
        • cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER - 当满足上述任何条件时停止迭代。
      2. max_iter - 一个指定最大迭代次数的整数。
      3. epsilon - 要求的精度
    • attempts : 用于指定使用不同初始标记执行算法的次数的标志。算法返回产生最佳紧凑性的标签。该紧凑性作为输出返回。
    • flags : 该标志用于指定初始中心的采用方式。通常会使用两个标志:cv.KMEANS_PP_CENTERS 和 cv.KMEANS_RANDOM_CENTERS
  • 输出参数:
    • compactness : 每个点到其相应中心的平方距离之和。
    • labels : 标签数组(与前一篇文章中的’代码’相同),其中每个元素都标记为’0’,‘1’…
    • centers : 聚类中心数组

图像去噪

  • OpenCV 提供了这种技术的四种变体。

  • cv.fastNlMeansDenoising() - 适用于单个灰度图像

  • cv.fastNlMeansDenoisingColored() - 适用于彩色图像。

  • cv.fastNlMeansDenoisingMulti() - 适用于短时间内拍摄的图像序列(灰度图像)

  • cv.fastNlMeansDenoisingColoredMulti() - 与上述相同,但适用于彩色图像。

  • 参数:文章来源地址https://www.toymoban.com/news/detail-422386.html

    • h:参数决定滤波器强度。较高的 h 值可以更好地消除噪声,但也会删除图像的细节。
    • hForColorComponents:与 h 相同,但仅适用于彩色图像。 (通常与 h 相同)
    • templateWindowSize:应该是奇数。 (推荐 7)
    • searchWindowSize:应该是奇数。 (推荐 21)

到了这里,关于OpenCV(14)-OpenCV4.0中文文档学习2(补充)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【图像处理】看OpenCV如何实现相机校准

            在本教程中,将介绍计算机视觉的科学领域,以及相机校准过程的简要总结。计算机视觉是实现自主系统的尝试,这些系统可以实现“人类视觉”的某些功能,其中相机被认为是传感器之一(相当于人眼)。了解捕获图像的内容是一项关键任务,这些计算机视觉系

    2024年02月12日
    浏览(31)
  • 【opencv】示例-stereo_calib.cpp 基于OpenCV的立体视觉相机校准的完整示例

    这段代码是一个用于执行立体视觉系统校准的应用程序的主函数main。它按以下步骤执行: 初始化用于指定棋盘尺寸、图像列表文件名、是否展示校正结果等参数的变量。 解析命令行输入的参数,其中包括棋盘的宽度、高度、类型、格子大小、Aruco标记大小、Aruco字典名称、额

    2024年04月15日
    浏览(40)
  • 【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

      由于学校要求暑期实习,于是找了一位学长开的公司,接了一个项目,是 对海康威视工业相机(MV_CE200_10GM)进行二次开发,读取其图像并做分析处理。 于是花了一点时间查找的相关资料并记录一些 入门要点 。   想先说说一些 “尝试授人与渔” 的话,也是自己的一

    2024年02月04日
    浏览(42)
  • 【opencv-python Gstreamer支持】Jetson Agx Orin手动编译opencv4.5.1加入gstreamer库,实现opencv简洁驱动GMSL2 IMX390相机

    # opencv官网下载opencv4.5.1源代码 opencv下载网址 # libtiff官网下载libtiff4的包,解决opencv编译问题 libtiff4下载地址 # libtiff安装 下载对应的安装包 tiff-4.0.10.zip ,( tiff-4.0.x.zip 都可以),解压之后,然后编译安装: # 编译安装

    2024年02月10日
    浏览(41)
  • OpenCV4 快速入门 (学习笔记 全)

    作者博客https://blog.csdn.net/shuiyixin?type=blog https://blog.csdn.net/shuiyixin/article/details/106046827 1.1.1 Mat类 https://blog.csdn.net/shuiyixin/article/details/106014341 1.1.2 Rect_结构 https://blog.csdn.net/shuiyixin/article/details/106085233 1.1.3 Scalar_结构 Scalar其实是一个从Vec派生得到的四元向量的模板类 一般情况,我

    2024年02月07日
    浏览(43)
  • intel realsense d435i相机标定中文文档

    此文档参考了官方的英文文档,原地址面向英特尔®实感™深度摄像头的 IMU 校准工具 (intelrealsense.com) IMU概述:惯性测量单元(imu)通常由加速度计组成,加速度通常以国际系统(SI)的米/秒为单位输出平方(m/s^2)和陀螺仪,陀螺仪通常以SI单位测量角速度弧度/秒(rad/s)。英特尔Real

    2024年02月09日
    浏览(41)
  • 相机校准—外参矩阵

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。 相机外参 摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。 那么,我们

    2023年04月16日
    浏览(58)
  • 学习Opencv(蝴蝶书/C++)代码——1.macOS下安装OpenCV4.8.0和QT5.15(C++)

    先看看vscode里怎么弄c++,详见:mac下vscode配置c++环境 同时记得把cmake下载好,路径配置好 直接从官网教程开始(事实证明不是很全面,还是有很多问题需要额外找解决方案): https://docs.opencv.org/4.x/d0/db2/tutorial_macos_install.html 一般是有两种安装方式: 直接安装对应平台的预编

    2024年01月18日
    浏览(63)
  • Gocator 3D线扫相机校准流程说明

    首先清除之前的校准数据 设定校准使用的有效数据区域,然后进行校准 有效区域的选择是以(长度+起始点)的方式选择的,即先设定轴的有效长度,然后选择数据的起始点 重新选取有效区域作为图像输出的范围 3D相机会自动根据校准后得到的高计算此时的测量宽度,即上图

    2024年02月11日
    浏览(35)
  • pytorch中文文档学习笔记

    先贴上链接 torch - PyTorch中文文档 首先我们需要安装拥有pytorch的环境 conda指令 虚拟环境的一些指令 查看所有虚拟环境 conda info -e 创建新的虚拟环境 conda create -n env_name python=3.6 删除已有环境 conda env remove -n env_name 激活某个虚拟环境 activate env_name 退出某个虚拟环境 deactivate en

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包