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

news2024/11/24 17:44:06

相机校准和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效果
  • 绘制坐标系、立方体等

线性几何

  • 两张图使用极线匹配

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

在这里插入图片描述

立体图像的深度图

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

  • 创建视差图

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()

在这里插入图片描述

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() - 与上述相同,但适用于彩色图像。

  • 参数:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHREEQC实践建模技术方法

PHREEQC软件为美国地质调查局基于C和C语言开发,面向一般地球化学、水文地球化学模拟的专业软件。该软件历经近30年迭代,功能不断完善,目前已发展成为-以PHREEQC为计算核心(更新至3.7版本),辅以具备二次开发…

【无标题】docker安装jenkins安装流程(二)

配置Publish Over SSH JENKINS_URL/job/goods/build?tokenTOKEN_NAME http://xxxxx:8001/job/goods/job/goods/build?tokenxql1232.提交合并代码触发自动构建 http://xxxxx:8001/buildByToken/build?jobgoods&tokenxql123http://xxxxx:8001/buildByToken/build?jobgood…

Javaee 基于注解的AOP开发

基于注解的 aop 开发步骤: 1. 创建目标接口和目标类(内部有切点) 2. 创建切面类(内部有增强方法) 3. 将目标类和切面类的对象创建权交给 spring 4. 在切面类中使用注解配置织入关系 5. 在配置文件中开启组件…

gpt写文章批量写文章-gpt3中文生成教程

怎么用gpt写文章批量写文章 批量写作文章是很多网站、营销人员、编辑等需要的重要任务,GPT可以帮助您快速生成大量自然、通顺的文章。下面是一个简单的步骤介绍,告诉您如何使用GPT批量写作文章。 步骤1:选择好训练模型 首先,选…

14、RPC与gRPC

目录 一、rpc基础1 - rpc入门2 - 基础的rpc通信3 - 基于接口的RPC服务 二、rpc编码1 - gob编码2 - json on tcp3 - json on http(待补充) 三、prtotobuf编码1 - prtotobuf概述2 - protobuf编译器3 - 序列化和反序列化4 - 基于protobuf的RPC(待…

TiDB实战篇-TiCDC

目录 简介 原理 使用场景 使用限制 硬件配置 部署 在安装TiDB的时候部署 扩容部署 操作 管理CDC 管理工具 查看状态 创建同步任务 公共参数 CDC任务同步到MySQL实战 同步命令 查看所有的同步任务 同步任务的状态 管理同步任务 查看一个同步信息的具体情况 …

腾讯云COS+ElmentUI+SpringBoot视频上传功能实现

文章目录 第一步:选择合适的组件并整合到项目中第二步:前端校验第三步:绑定上传成功方法第四步:腾讯云cos后端接口配置 今天在做项目的时候需要完成一个视频上传的功能,这里做一个记录! 第一步:…

春秋云境:CVE-2022-25411(Maxsite CMS文件上传漏洞)

目录 一、题目 二、官方POC 一、题目 介绍: MaxSite CMS是俄国MaxSite CMS开源项目的一款网站内容管理系统 Maxsite CMS存在文件上传漏洞,攻击者可利用该漏洞通过精心制作的PHP文件执行任意代码。 进入题目: 发现是俄文 乌拉~~ 不过没…

MongoDB副本集

一、介绍 MongoDB副本集(Replica set)是一组MongoDB实例,它们都维护着相同的数据集合。MongoDB副本集是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。副本集没有固定的主节点,当主节点发生故障时整个集群会选举一个主节点为系统提供服务…

6.S081——Lab3——page table

0.briefly speaking 这是6.S081 Fall 2021的第三个实验,是页表和虚拟内存相关的实验,在之前我们已经详细地阅读了Xv6内核中有关虚拟内存管理的源代码,现在就可以深入一下这个实验了。本实验分为如下三个小任务: Speed up system…

【Mac-m2芯片docker安装AWVS及问题解决】

【Mac-m2芯片docker安装AWVS及问题解决】 docker安装AWVS安装报错问题解决 docker安装 docker安装命令: brew install --cask --appdir/Applications docker 查看是否安装成功: docker --version docker info 换源: “https://hub-mirror.c.…

在Python中使用牛顿法

牛顿法简介 牛顿法(Newton’s method)是一种常用的优化算法,在机器学习中被广泛应用于求解函数的最小值。其基本思想是利用二次泰勒展开将目标函数近似为一个二次函数,并用该二次函数来指导搜索方向和步长的选择。 牛顿法需要计…

从零开始学架构——FMEA故障模式与影响分析

1 FMEA介绍 FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,专栏采用“故障模式与影响分析”,因为这个中文翻译更加符合可用性的语…

高并发的程序设计-系统设计层面

高并发的程序设计-系统设计层面 目录概述需求: 设计思路实现思路分析1.主要指标二、处理高并发的方案 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better …

ChatGPT写文章效果-ChatGPT写文章原创

ChatGPT写作程序:让文案创作更轻松 在当前数字化的时代,营销推广离不开文案创作。然而,写作对许多人来说可能是一项耗时而枯燥的任务。如果您曾经为写出较高质量的文案而苦恼过,那么ChatGPT写作程序正是为您而设计的。 ChatGPT是…

gitlab安装与使用(图文详解超详细)

一 找最新的安装镜像 推荐用清华源 目前最新版本是15.95 二 在/opt 下创建gitlab文件夹 [rootlocalhost ~]# mkdir /opt/gitlab [rootlocalhost ~]# 三 在gitlab目录下写一个 shell脚本 vim int.sh给它加上执行权限 chmod ux int.sh运行这个脚本 ./ins.sh出现这个截图 安…

three.js之摄像机

本节将在上一节的基础上进一步介绍一下摄像机功能。 three.js的摄像机主要包括两类:正交投影摄像机和透视投影摄像机。 透视投影摄像机:THREE.PerspectiveCamera,最自然的视图,距离摄像机越远,它们就会被渲染得越小。…

【编程问题】解决 mapper.xml 文件的 resultType 爆红问题:Cannot resolve symbol ‘xxx‘

解决mapper.xml文件的resultType爆红问题:Cannot resolve symbol xxx 1.问题描述2.问题分析3.问题解决3.1 配置注解(推荐)3.2 配置全类名3.3 删除插件 4.事件感悟 系统:Win10 JDK:1.8.0_333 IDEA:2022.2.4 …

HCIP之MPLS中的VPN

目录 HCIP之MPLS中的VPN 定义 例图 解读 流程 双层标签技术 控制层面 数据层面 配置 HCIP之MPLS中的VPN 定义 VPN --- 虚拟网专用 --- 是一种运营商提供的,专门解决虚拟专线安全及宽带问题的综合解决方案 例图 解读 站点 --- 可以理…

Day936.如何重构过大类 -系统重构实战

如何重构过大类 Hi,我是阿昌,今天学习记录的是关于如何重构过大类的内容。 在过去的代码里一定会遇到一种典型的代码坏味道,那就是“过大类”。 在产品迭代的过程中,由于缺少规范和守护,单个类很容易急剧膨胀&#…