当前位置: 首页 > news >正文

【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 ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞&#x1f44d…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...