【opencv】图像畸变校正
接上篇文章:【鱼眼+普通相机】相机标定
附代码:
方法一:
使用cv2.undistort
"""Create May 11, 2024@author Wang Jiajun
"""import cv2
import numpy as npdef correct(img,camera_file='E:/calib_yaml/ship_calib.yaml'):"""矫正图像,去除畸变img: 输入图像camera_file: 相机参数文件return: 矫正后的图像"""fs = cv2.FileStorage(camera_file, cv2.FILE_STORAGE_READ)camera_matrix = fs.getNode("camera_matrix").mat()dist_coeffs = fs.getNode("dist_coeffs").mat() # 畸变参数--顺序很重要!!!:k1,k2,p1,p2,k3resolution = fs.getNode("resolution").mat() # 图像分辨率imSize = (resolution[0][0], resolution[1][0])fs.release()# 矫正图像img_distort = cv2.undistort(img, np.array(camera_matrix), np.array(dist_coeffs))return img_distort if __name__ == '__main__':camera_file = 'E:/calib_yaml/ship_calib.yaml'video = cv2.VideoCapture(0)while True:ret, img = video.read()# 3. 矫正图像img = cv2.resize(img, (640, 480))cv2.putText(img, "Press q to exit", (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 200, 0), 2)img_distort = cv2.correct(img, camera_file )# 4. 显示原图和矫正后的图像cv2.imshow('img_original', img)cv2.imshow('img_distort', img_distort)key = cv2.waitKey(1)# 5. 按q退出if key & 0xFF == ord('q'):break# 6. 关闭窗口video.release()cv2.destroyAllWindows()
方法二:
使用cv2.initUndistortRectifyMap建立映射关系,就不用每次读取内参了,速度更快。
"""Create May 11, 2024@author Wang Jiajun
"""import cv2
import numpy as npdef correct(camera_file='E:/calib_yaml/ship_calib.yaml'):"""矫正图像,去除畸变img: 输入图像camera_file: 相机参数文件return: 矫正后的图像"""fs = cv2.FileStorage(camera_file, cv2.FILE_STORAGE_READ)camera_matrix = fs.getNode("camera_matrix").mat()dist_coeffs = fs.getNode("dist_coeffs").mat() # 畸变参数--顺序很重要!!!:k1,k2,p1,p2,k3resolution = fs.getNode("resolution").mat() # 图像分辨率imSize = (resolution[0][0], resolution[1][0])fs.release()# 矫正图像new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(np.array(camera_matrix), np.array(dist_coeffs),imSize, 0,imSize)map1, map2 = cv2.initUndistortRectifyMap(np.array(camera_matrix), np.array(dist_coeffs), None, new_camera_matrix,imSize, cv2.CV_32FC1)# img_distort = cv2.undistort(img, np.array(camera_matrix), np.array(dist_coeffs))return map1, map2if __name__ == '__main__':camera_file = 'E:/calib_yaml/ship_calib.yaml'map1, map2 = correct(camera_file)video = cv2.VideoCapture(0)while True:ret, img = video.read()# 3. 矫正图像img = cv2.resize(img, (640, 480))cv2.putText(img, "Press q to exit", (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 200, 0), 2)img_distort = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)# 4. 显示原图和矫正后的图像cv2.imshow('img_original', img)cv2.imshow('img_distort', img_distort)key = cv2.waitKey(1)# 5. 按q退出if key & 0xFF == ord('q'):break# 6. 关闭窗口video.release()cv2.destroyAllWindows()相关文章:
【opencv】图像畸变校正
接上篇文章:【鱼眼+普通相机】相机标定 附代码: 方法一: 使用cv2.undistort """Create May 11, 2024author Wang Jiajun """import cv2 import numpy as npdef correct(img,camera_fileE:/cali…...
Charger之二输入电压动态电源原理(VIN-DPM)
主要内容 Charger的VIN-DPM 前篇内容:电池管理IC(Charger)了解一下? 领资料:点下方↓名片关注回复:粉丝群 正文 一、 VIN-DPM概念 VIN-DPM是指输入电压动态电源管理(Input voltage dynamic…...
【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)
🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。 🎯每天努力一点点,技术变化看得见 文章目录 创建表查看表结构修改表删除表 创建表 语法: create table table_name(field1 datatype,field2 datatype,fiel…...
曲线救国:window 安装 docker
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)
前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…...
Pascal Content数据集
如果您想使用Pascal Context数据集,请安装Detail,然后运行以下命令将注释转换为正确的格式。 1.安装Detail 进入项目终端 #即 这是在我自己的项目下直接进行克隆操作: git clone https://github.com/zhanghang1989/detail-api.git $PASCAL…...
【Unity】使用Resources.LoadAll读取文件的顺序问题
最近在做客户的一个项目,其中的一个模块使用到了照片,但是发现了一个很严重的问题。当你在使用Unity的时候,它竟然不按照顺序读取?这个机器人是不是逻辑有问题?如下图: 名字脱敏了哈。。。 照片比较多&…...
pdf怎么标注红色方框?五种PDF标注红色方框方法
pdf怎么标注红色方框?在当今数字化时代,PDF文档已成为我们日常工作和学习中不可或缺的一部分。然而,如何在海量的PDF文件中快速、准确地标注出重要信息,让内容更加醒目呢?今天,我将向大家介绍五种PDF标注红…...
C++字符串细节,面试题06
文章目录 22. 字符串22.1. 字符数组 vs 字符指针 vs 常量字符指针 vs string22.2. strcpy vs sprintf vs memcpy22.3. strlen vs length vs size vs sizeof22.4. 字符串之间的转换22.5 其他数据类型与字符串之间的转换22.6 字符串分割 22. 字符串 22.1. 字符数组 vs 字符指针 …...
AutoModelForCausalLM.from_pretrained 函数调用本地权重报错
文章目录 1、代码报错的位置(前情提要)finetune_lora.shfintune_clm_lora.py 2、报错截图2.1、huggingfaces上的 meta-llama/Llama-2-7b-chat-hf2.2、服务器上模型文件路径 3、特别注意事项 1、代码报错的位置(前情提要) 在终端直…...
【qt】动态属性
这里写目录标题 一.属性1.属性的好处2.添加属性3.使用属性 二.只读属性 一.属性 1.属性的好处 说到属性(property),你们会想到什么?我会联想到特点,就是一类对象所特有的,在C中,成员数据就是这…...
Git知识点总结
目录 1、版本控制 1.1什么是版本控制 1.2常见的版本控制工具 1.3版本控制分类 2、集中版本控制 SVN 3、分布式版本控制 Git 2、Git与SVN的主要区别 3、软件下载 安装:无脑下一步即可!安装完毕就可以使用了! 4、启动Git 4.1常用的Li…...
【数据库】数据库指令
一。数据库打开 1.命令行 2.进入mysql mysql -uroot -p密码 3.退出 exit; 二。针对数据库的操作 1.创建数据库(有分号) create database student; 2.使用数据库 use student 3.删除数据库(有分号) drop database…...
设计模式——状态模式(State)
状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式通过把对象的每一个状态都封装到一个单独的类中,并将请求委托给当前状态对象来让状态的变化与行…...
理解打包好的vue项目结构dist包
目录 linux查询dist目录整体解释子目录文件解释CSSFONTSJS linux查询dist目录 roothcss-ecs-7881:/www/java_project/dist# ls -l total 3004 drwxr-xr-x 2 root root 4096 Dec 31 10:15 css -rw-r--r-- 1 root root 4286 Dec 31 10:15 favicon.ico drwxr-xr-x 2 root r…...
24深圳杯C题18页高质量论文+可执行代码+图表
比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的,大家可以参考我往期的资料,所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意:(建议先下单占坑,因为随着后续我们更新资料数…...
Midjourney Imagine API 申请及使用
Midjourney Imagine API 申请及使用 申请流程 要使用 Midjourney Imagine API,首先可以到 Midjourney Imagine API 页面点击「Acquire」按钮,获取请求所需要的凭证: 如果你尚未登录或注册,会自动跳转到登录页面邀请您来注册和登…...
电子邮箱是什么?怎么申请一个电子邮箱?
电子邮箱是我们沟通的工具,细分为免费版电子邮箱和付费版电子邮箱。怎么申请一个属于自己的电子邮箱?今天小编就分享一下电子邮箱注册教程,手把手教您注册一个电子邮箱。 一、电子邮箱的定义 电子邮箱,简称邮箱,是一…...
C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型
文章目录 一、通过内存序实现顺序模型1、Relaxed Ordering2、Sequencial Consistent Ordering3、Acquire Release Ordering 前言 前文介绍了六种内存顺序,以及三种内存模型,本文通过代码示例讲解六种内存顺序使用方法,并实现相应的内存模型。…...
【数据结构】栈和队列专题
前言 上篇博客我们讨论了栈和队列的有关结构,本篇博客我们继续来讨论有关栈和队列习题 这些题算是经典了 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
