opencv 鱼眼图像的矫正(动态参数调整)

一:棋盘校准参数说明(内参)

棋盘校准的方法及代码很多,参见其他连接

1:内参矩阵

2:畸变系数

针对鱼眼相机此处是4个参数,在其校准代码中也可以知道,其通常的定义如下:

       data.camera_mat = np.eye(3, 3)data.dist_coeff = np.zeros((4, 1))

二:基于生成的参数D和K进行调整

直接上代码,

import os
import numpy as np
import cv2
#下面的值是来自棋盘格校准后的内参矩阵K
initial_camera_matrix = np.array([[389.3455401867884, 0.0, 630.3678577531273],[0.0, 388.5686773894828, 361.167452606629],[0.0, 0.0, 1.0]])camera_mat = np.array([[302.116935,0.0,521.926531],[  0.0, 358.512097, 363.652721],[  0.0, 0.0,     1.0      ]])#下面的值是来自棋盘格校准后的D
dist_coeff = np.array([[0.05648235312901486],[-0.024826520405491565],[-0.002416551582982325],[0.0010672440368159684]])def adjust_parameters(x):
# 获取当前滑动条的值fx = cv2.getTrackbarPos('fx', 'Parameters')/ 100.0 fy = cv2.getTrackbarPos('fy', 'Parameters')/ 100.0 cx = cv2.getTrackbarPos('cx', 'Parameters')/ 100.0 cy = cv2.getTrackbarPos('cy', 'Parameters')/ 100.0 k1 = cv2.getTrackbarPos('k1', 'Parameters') / 2000000  # 调整范围以便于滑动条控制k2 = cv2.getTrackbarPos('k2', 'Parameters') / 2000000p1 = cv2.getTrackbarPos('p1', 'Parameters') / 2000000p2 = cv2.getTrackbarPos('p2', 'Parameters') / 2000000# 更新相机矩阵和畸变系数new_camera_matrix = np.array([[fx, 0.0, cx],[0.0, fy, cy],[0.0, 0.0, 1.0]])new_distortion_coeff = np.array([[k1], [-k2], [-p1], [p2]])map1, map2 = cv2.fisheye.initUndistortRectifyMap(initial_camera_matrix, new_distortion_coeff, np.eye(3, 3), new_camera_matrix, (args.width * args.sizescale, args.height * args.sizescale), cv2.CV_16SC2) img = np.load("./calibrate_img/img_cam5.npy")print(new_camera_matrix)print(new_distortion_coeff)undistort_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)undistort_img=cv2.resize(undistort_img,(img.shape[1],img.shape[0]))cv2.imshow("undistort_img",undistort_img)cv2.imshow("src_img",img)def main():cv2.namedWindow('Parameters')# 添加相机矩阵的滑动条cv2.createTrackbar('fx', 'Parameters', int(camera_mat[0, 0]* 10000), 90*100000, adjust_parameters)cv2.createTrackbar('fy', 'Parameters', int(camera_mat[1, 1]* 10000), 90*100000, adjust_parameters)cv2.createTrackbar('cx', 'Parameters', int(camera_mat[0, 2]* 10000), 90*1000000, adjust_parameters)cv2.createTrackbar('cy', 'Parameters', int(camera_mat[1, 2]* 10000), 90*100000, adjust_parameters)# 添加畸变系数的滑动条cv2.createTrackbar('k1', 'Parameters', int(dist_coeff[0, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('k2', 'Parameters', int(dist_coeff[1, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('p1', 'Parameters', int(dist_coeff[2, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('p2', 'Parameters', int(dist_coeff[3, 0] * 100000), 4000000, adjust_parameters)while True:key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakcv2.destroyAllWindows()  if __name__ == '__main__':main()    

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

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

相关文章

报修小程序论文(设计)开题报告

一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…

uniapp-小程序获取用户位置

1. 需要在微信公众平台进行接口的申请。选择自己需要用的接口。 2. 在app.json文件中配置permission和requiredPrivateInfos。requiredPrivateInfos里面是你需要使用的接口。 3. 配置完成后,就可以使用了。 相关获取位置API的链接 4. 如果要获取当前位置到某一个指…

【在 OpenResty 中使用 Lua 获取服务器自身的 IP 地址】

要在 OpenResty 中使用 Lua 获取服务器自身的 IP 地址,可以使用 Lua 结合系统命令来获取本地网络接口的 IP 地址。以下是一个示例,展示如何实现这一点: 修改你的 nginx.conf 文件,添加一个新的 location 块来处理获取本地 IP 地址…

java顺序表的实现

一,前言 hello大家好呀,今天浅略讲讲java的顺序表,其实顺序表大概一个月前就学了,但是由于前段时间期末一直没写博客,但是现在想想其实期末我还是有很多空余时间的,但是由于自己的原因耽误了很多时间现在想…

C++面向对象的常见面试题目(二)

1. 继承关系下,析构函数和构造函数执行顺序? 构造函数按照依赖链,从强到弱构造 首先调用基类的构造函数。如果有多个基类,则按照它们在派生类声明中出现的顺序调用;接下来,按照它们在类中声明的顺序&…

windows USB 设备驱动开发-处理批传输的静态流

在 USB 2.0 和更早版本的设备中,批量端点可以通过该端点发送或接收单个数据流。 在 USB 3.0 设备中,批量端点能够通过该端点发送和接收多个数据流。 Windows 中 Microsoft 提供的 USB 驱动程序堆栈支持多个流。 这使客户端驱动程序能够将独立的 I/O 请求…

GEE代码实例教程详解:长时间序列风速分析

简介 在本篇博客中,我们将使用Google Earth Engine (GEE) 对长时间序列的风速数据进行分析。通过ERA5再分析数据集,我们可以计算2010年至2024年间的平均风速,并与1980年至2020年的风速数据进行比较。 背景知识 ERA5数据集 ERA5是ECMWF&am…

代码随想录-Day53

739. 每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: …

【Linux】目录的相关命令——cd,pwd,mkdir,rmdir

1.相对路径与绝对路径 在开始目录的切换之前,你必须要先了解一下所谓的路径(PATH),有趣的是:什么是相对路 与绝对路径? 绝对路径:路径的写法“一定由根目录/写起”,例如:/usr/shar…

Java版Flink使用指南——定制RabbitMQ数据源的序列化器

大纲 新建工程新增依赖数据对象序列化器接入数据源 测试修改Slot个数打包、提交、运行 工程代码 在《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中,我们从RabbitMQ队列中读取了字符串型数据。如果我们希望读取的数据被自动化转换为一个对象&#x…

Linux C++ 043-机房预约系统

Linux C 043-机房预约系统 本节关键字:Linux、C、机房预约系统 相关库函数:for_each、open、close、write 系统简介 学校现在有几个规格不同的机房,由于使用经常出现撞车现象,现开发一套机房预约系统,解决这一问题。…

Java进阶---抽象方法abstract

抽象方法 案例引入: 在某个宠物店的宠物资源管理系统中有: 狗类:属性(姓名),行为(吃饭) 猫类:属性(姓名),行为(吃饭)利用…

智慧科技照亮水利未来:深入剖析智慧水利解决方案如何助力水利行业实现高效、精准、可持续的管理

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 物联网技术:构建全面感知网络 2. 大数据与云计算:实现数据高效处理与存储 3. GIS与三维可视化:提升决策支持能力 4. 人工智能与机器学习:驱动决策智能化 …

LibreOffice的国内镜像安装地址和node.js国内快速下载网站

文章目录 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 国内镜像包网址:https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

Java面试八股之MySQL中int(10)和bigint(10)能存储读的数据大小一样吗

MySQL中int(10)和bigint(10)能存储读的数据大小一样吗 在MySQL中,int(10)和bigint(10)的数据存储能力并不相同,尽管括号内的数字(如10)看起来似乎暗示着某种关联,但实际上这个数字代表的是显示宽度,而不是…

vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素

7、指令修饰符 (1)概念: 通过“.”指明一些指令后缀,不同后缀封装了不同的处理操作->简化代码 (2)按键修饰符 keyup.enter->键盘回车监听 (3)v-model修饰符 v-model.tri…

vue + element ui 实现侧边栏导航栏折叠收起

首页布局如下 要求点击按钮,将侧边栏收缩, 通过 row 和 col 组件&#xff0c;并通过 col 组件的 span 属性我们就可以自由地组合布局。 折叠前 折叠后 <template><div class"app-layout" :class"{ collapse: app.isFold }"><div class&…

Onekey正版steam分流下载工具

今天给大家介绍的是一款下载steam游戏的工具。Onekey工具&#xff0c;是一款游戏下载器&#xff0c;可以下载steam正版分流游戏。下载正版分流的网站很多&#xff0c;但是都是网盘或者迅雷下载&#xff0c;或者游戏盒子下载&#xff0c;速度都很慢。这款软件是用steam下载的&am…

Flask项目搭建及部署 —— Python

flask搭建及部署 pip 19.2.3 python 3.7.5 Flask 1.1.1 Flask-SQLAlchemy 2.4.1 Pika 1.1.0 Redis 3.3.11 flask-wtf 0.14.2 1、创建flask项目&#xff1a; 创建完成后整个项目结构树&#xff1a; app.py: 项⽬管理⽂件&#xff0c;通过它管理项⽬。 static: 存放静态…

自定义控件视图篇(一)测量与布局

在自定义控件的开发过程中&#xff0c;"视图篇"的测量与布局是非常关键的步骤&#xff0c;这直接决定了控件的尺寸、位置以及子视图的排列方式。下面我将详细介绍测量和布局的过程&#xff0c;以及如何在自定义控件中正确实现这些步骤。 视图的测量 (onMeasure) 在…