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

鱼眼相机 去畸变

目录

枕形畸变和去枕形畸变

去枕形畸变失败


枕形畸变和去枕形畸变

import cv2
import numpy as np
import matplotlib.pyplot as plt# 创建一个带网格的原始图像
def create_grid(image_size=512, grid_size=20):image = np.zeros((image_size, image_size, 3), dtype=np.uint8)for i in range(0, image_size, grid_size):cv2.line(image, (i, 0), (i, image_size), (255, 255, 255), 1)cv2.line(image, (0, i), (image_size, i), (255, 255, 255), 1)return image# 应用枕形畸变
def apply_pincushion_distortion(image, k1=0.05):image_size = image.shape[0]fx, fy = image_size * 1.0, image_size * 1.0cx, cy = image_size / 2, image_size / 2camera_matrix = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])dist_coeffs = np.array([k1, 0, 0, 0, 0])  # 正值增加枕形畸变h, w = image.shape[:2]new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(camera_matrix, dist_coeffs, (w, h), 1)distorted_image = cv2.undistort(image, camera_matrix, dist_coeffs, None, new_camera_matrix)return distorted_image# 去除枕形畸变
def remove_pincushion_distortion(image, k1=0.0005):image_size = image.shape[0]fx, fy = image_size * 1.0, image_size * 1.0cx, cy = image_size / 2, image_size / 2camera_matrix = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])dist_coeffs = np.array([-k1, 0, 0, 0, 0])  # 负值去除枕形畸变h, w = image.shape[:2]new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(camera_matrix, dist_coeffs, (w, h), 1)undistorted_image = cv2.undistort(image, camera_matrix, dist_coeffs, None, new_camera_matrix)return undistorted_image# 主函数
if __name__ == "__main__":original_grid = create_grid()distorted_grid = apply_pincushion_distortion(original_grid,k1=-0.2)undistorted_grid = remove_pincushion_distortion(distorted_grid,k1=-0.2-0.2)# 使用 OpenCV 展示图像cv2.imshow('Original Image', original_grid)cv2.imshow('Pincushion Distorted Image', distorted_grid)cv2.imshow('Undistorted Image', undistorted_grid)cv2.waitKey(0)cv2.destroyAllWindows()

去枕形畸变失败

import cv2
import numpy as np
import matplotlib.pyplot as plt# 创建一个带有枕形畸变的网格图像
def create_pincushion_distorted_grid(image_size=512, grid_size=20):image = np.zeros((image_size, image_size, 3), dtype=np.uint8)for i in range(0, image_size, grid_size):cv2.line(image, (i, 0), (i, image_size), (255, 255, 255), 1)cv2.line(image, (0, i), (image_size, i), (255, 255, 255), 1)k1, k2, p1, p2, k3 = -0.2, 0, 0, 0, 0  # 负数制造枕形畸变fx, fy = image_size, image_sizecx, cy = image_size / 2, image_size / 2camera_matrix = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])dist_coeffs = np.array([k1, k2, p1, p2, k3])map1, map2 = cv2.initUndistortRectifyMap(camera_matrix, dist_coeffs, None, camera_matrix, (image_size, image_size), 5)distorted_image = cv2.remap(image, map1, map2, cv2.INTER_LINEAR)return image, distorted_image, camera_matrix, dist_coeffs# 去除枕形畸变
def undistort_image(image, camera_matrix, dist_coeffs):h, w = image.shape[:2]new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(camera_matrix, dist_coeffs, (w, h), 1, (w, h))undistorted_image = cv2.undistort(image, camera_matrix, dist_coeffs, None, new_camera_matrix)return undistorted_image# 主函数
if __name__ == "__main__":original_grid, distorted_grid, camera_matrix, dist_coeffs = create_pincushion_distorted_grid()# 手动生成去畸变的映射map1, map2 = cv2.initUndistortRectifyMap(camera_matrix, dist_coeffs, None, camera_matrix, (original_grid.shape[1], original_grid.shape[0]), cv2.CV_32FC1)undistorted_grid = cv2.remap(distorted_grid, map1, map2, cv2.INTER_LINEAR)# 使用 OpenCV 展示图像cv2.imshow('Original Image', original_grid)cv2.imshow('Distorted Image', distorted_grid)cv2.imshow('Undistorted Image', undistorted_grid)cv2.waitKey(0)cv2.destroyAllWindows()

相关文章:

鱼眼相机 去畸变

目录 枕形畸变和去枕形畸变 去枕形畸变失败 枕形畸变和去枕形畸变 import cv2 import numpy as np import matplotlib.pyplot as plt# 创建一个带网格的原始图像 def create_grid(image_size512, grid_size20):image np.zeros((image_size, image_size, 3), dtypenp.uint8)…...

DC/AC电源模块:为智能家居设备提供恒定的电力供应

BOSHIDA DC/AC电源模块:为智能家居设备提供恒定的电力供应 DC/AC电源模块是一种常见的电源转换器,它将直流电源(DC)转换为交流电源(AC),为智能家居设备提供恒定的电力供应。在智能家居系统中&a…...

小红书运营教程02

小红书大致会分享10篇左右。微博、抖音、以及视频剪辑等自媒体运营相关技能以及运营教程相关会陆续的进行分享。 上次分享涉及到的对比,母婴系列,或者可以说是服装类型,不需要自己过多的投入,对比知识类博主来说,自己将知识讲述出来,然后要以此账号进行变现就比较麻烦,…...

k8s自动清理节点服务

要在 Kubernetes 中实现当某个节点的 CPU 或内存使用超过 90% 时清理该节点上的服务,你可以使用以下几种方法: 自定义脚本和 cron job:编写一个脚本监控节点的资源使用情况,并在超过阈值时触发清理操作。使用 DaemonSet 运行监控…...

JS如何把年月日转为时间戳

在JavaScript中,将年月日(通常表示为一个字符串或者分别的年、月、日数字)转换为时间戳(即Unix时间戳,是自1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒)可以…...

【YOLOv5进阶】——引入注意力机制-以SE为例

声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载! 一、站在巨人的肩膀上 SE模块即Squeeze-and-Excitation 模块,这是一种常用于卷积神经网络中的注意力机制!! 借鉴代码的代码链接如下&a…...

【C++题解】1456. 淘淘捡西瓜

问题:1456. 淘淘捡西瓜 类型:贪心 题目描述: 地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,包的容量是固定的,淘淘希望尽可能在包里装更多的西瓜(当然要装整个的,不能切开…...

用Python读取Word文件并提取标题

前言 在日常工作中,我们经常需要处理Word文档,特别是从中提取关键信息,如标题、段落等。今天,我们将利用Python来实现这一功能,并为大家提供一段完整的代码示例。 准备工作 首先,你需要安装python-docx库…...

Windows编程上

Windows编程[上] 一、Windows API1.控制台大小设置1.1 GetStdHandle1.2 SetConsoleWindowInfo1.3 SetConsoleScreenBufferSize1.4 SetConsoleTitle1.5 封装为Innks 2.控制台字体设置以及光标调整2.1 GetConsoleCursorInfo2.2 SetConsoleCursorPosition2.3 GetCurrentConsoleFon…...

BiTCN-Attention一键实现回归预测+8张图+特征可视化图!注意力全家桶再更新!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 原理简介 数据介绍 结果展示 全家桶代码目…...

zoom缩放问题(关于ElementPlus、Echarts、Vue3draggable等组件偏移问题)

做了一个项目下来&#xff0c;由于整体界面偏大&#xff0c;采取了缩放90%&#xff0c;导致很多组件出现偏移问题&#xff0c;以下我会把我遇到的各种组件偏移问题依次进行描述解答&#xff1a; ElementPlus选择器下拉偏移 <template><el-select :teleported"f…...

【后端面试题】【中间件】【NoSQL】MongoDB的配置服务器、复制机制、写入语义和面试准备

MongoDB的配置服务器 引入了分片机制之后&#xff0c;MongoDB启用了配置服务器(config server) 来存储元数据&#xff0c;这些元数据包括分片信息、权限控制信息&#xff0c;用来控制分布式锁。其中分片信息还会被负责执行查询mongos使用。 MongoDB的配置服务器有一个很大的优…...

视频监控汇聚平台LntonCVS视频监控业务平台具体有哪些功能?

LntonCVS视频监控平台是一款基于H5技术开发的专业安防视频监控产品&#xff0c;旨在为安防视频监控行业提供全面的解决方案。以下是平台的主要功能和特点&#xff1a; 1. 统一接入管理&#xff1a; - 支持国内外各种品牌、协议和设备类型的监控产品统一接入管理。 - 提供标准的…...

我不小心把生产的数据改错了!同事帮我用MySQL的BinLog挽回了罚款

之前在生产做修改数据的时候不小心改错了一行数据&#xff0c;本来以为会被通报批评&#xff0c;但是同事利用binlog日志查看到了之前的旧数据&#xff0c;并且帮我回滚了&#xff0c;学到了&#xff0c;所以写了一篇binlog的文章分享给大家。 MySQL的Binary Log&#xff08;简…...

Windows系统安装NVM,实现Node.js多版本管理

目录 一、前言 二、NVM简介 三、准备工作 1、卸载Node 2、创建文件夹 四、下载NVM 五、安装NVM 六、使用NVM 1、NVM常用操作命令 2、查看NVM版本信息 3、查看Node.js版本列表&#xff1b; 4、下载指定版本Node.js 5、使用指定版本Node.js 6、查看已安装Node.js列…...

k8s部署单节点redis

一、configmap # cat redis-configmap.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-single-confignamespace: redis data:redis.conf: |daemonize nobind 0.0.0.0port 6379tcp-backlog 511timeout 0tcp-keepalive 300pidfile /data/redis-server.pidlogfile /d…...

云微客矩阵系统:如何利用智能策略引领营销新时代?

近些年&#xff0c;短视频行业的风头一时无二&#xff0c;大量的商家和企业进驻短视频赛道&#xff0c;都或多或少的实现了实体门店的流量增长。虽然说现在短视频的门槛在逐步降低&#xff0c;但是迄今为止依旧有很多人在短视频剪辑面前望而却步。 最近在短视频营销领域&#x…...

嵌入式Linux系统编程 — 6.3 kill、raise、alarm、pause函数向进程发送信号

目录 1 kill函数 1.1 kill函数介绍 1.2 示例程序 2 raise函数 2.1 raise函数介绍 2.2 示例程序 3 alarm函数 3.1 alarm函数介绍 3.2 示例程序 4 pause函数 4.1 pause函数介绍 4.2 示例程序 与 kill 命令相类似&#xff0c; Linux 系统提供了 kill()系统调用&#…...

Swoole实践:如何使用协程构建高性能爬虫

随着互联网的普及&#xff0c;web爬虫已经成为了一个非常重要的工具&#xff0c;它可以帮助我们快速地抓取所需要的数据&#xff0c;从而降低数据获取成本。在爬虫的实现中&#xff0c;性能一直是一个重要的考虑因素。swoole是一款基于php的协程框架&#xff0c;它可以帮助我们…...

基于人脸68特征点识别的美颜算法(一) 大眼算法 C++

1、加载一张原图&#xff0c;并识别人脸的68个特征点 cv::Mat img cv::imread("5.jpg");// 人脸68特征点的识别函数vector<Point2f> points_vec dectectFace68(img);// 大眼效果函数Mat dst0 on_BigEye(800, img, points_vec);2、函数 vector<Point2f&g…...

基于Go的轻量级自托管IM系统OpenWhisp部署与架构解析

1. 项目概述&#xff1a;一个开源的即时通讯解决方案最近在折腾一个内部协作工具&#xff0c;需要集成一个轻量级的即时通讯模块。市面上成熟的方案不少&#xff0c;但要么是SaaS服务&#xff0c;数据不在自己手里&#xff0c;心里不踏实&#xff1b;要么是像Rocket.Chat、Matt…...

ARM架构寄存器与参数管理核心技术解析

1. ARM架构寄存器与参数管理基础解析 在ARM架构的底层开发中&#xff0c;寄存器与参数管理是系统控制和调试的核心机制。作为嵌入式开发者&#xff0c;我经常需要与这两种资源打交道&#xff0c;它们虽然都用于存储数据&#xff0c;但在使用场景和特性上存在本质差异。 寄存器…...

FinalBurn Neo:终极开源街机模拟器技术深度解析

FinalBurn Neo&#xff1a;终极开源街机模拟器技术深度解析 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo&#xff08;简称FBNeo&#xff09;是一款专业级的开源街机模拟器&#xff0c;…...

5分钟终极指南:在Blender中完美导入Rhino 3dm文件的完整教程

5分钟终极指南&#xff1a;在Blender中完美导入Rhino 3dm文件的完整教程 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 你是否正在寻找一种简单、快速且免费的方法&#xff0c…...

告别串口线!用STM32CubeMX给STM32F103C8T6做个USB DFU Bootloader(Keil工程+完整代码)

STM32F103C8T6 USB DFU Bootloader实战&#xff1a;从实验室到产品的完整方案 在嵌入式产品开发中&#xff0c;固件升级是一个绕不开的话题。想象一下&#xff0c;当你的设备已经部署在现场&#xff0c;却发现需要修复一个关键bug或增加新功能时&#xff0c;传统的JTAG/SWD调试…...

Go语言LLM应用开发框架:统一接口与工具调用实战

1. 项目概述&#xff1a;一个为Go语言量身打造的LLM应用开发框架如果你正在用Go语言构建一个需要集成大语言模型&#xff08;LLM&#xff09;的应用&#xff0c;比如一个智能客服机器人、一个代码生成工具&#xff0c;或者一个文档分析系统&#xff0c;那么你很可能已经体会过那…...

Node.js代理池实战:proxy-agents库核心原理与高级应用

1. 项目概述与核心价值最近在折腾一些需要处理大量网络请求的自动化脚本&#xff0c;比如数据采集、API测试或者模拟用户操作&#xff0c;一个绕不开的痛点就是IP被封。单个IP频繁请求&#xff0c;对方服务器很容易就把你拉黑了。这时候&#xff0c;代理池就成了刚需。市面上成…...

FeFET时间域内存计算宏:突破AI边缘计算能效瓶颈

1. 项目概述&#xff1a;FeFET时间域内存计算宏的创新实现在人工智能和边缘计算蓬勃发展的当下&#xff0c;传统冯诺依曼架构面临着一个根本性挑战&#xff1a;数据在处理器和存储器之间的频繁搬运导致的高能耗和延迟瓶颈。这个问题在需要大量并行乘累加(MAC)运算的神经网络应用…...

codex features

这份列表是 OpenAI Codex 内部的功能开关&#xff0c;每个功能都处于特定的开发阶段。下面按稳定程度对这些功能进行了分类说明。 &#x1f7e2; 稳定版 (Stable) - 可以放心使用 这些功能已经过充分测试&#xff0c;适合在日常工作流中启用。功能名称功能说明apps支持 AI 直接…...

复杂系统交付中的风险治理与经济模型转型

1. 复杂系统交付中的风险本质与治理转型在航空航天、国防军工等复杂系统开发领域&#xff0c;项目失败率长期居高不下。根据IBM对全球500个大型系统的调研&#xff0c;73%的项目存在严重进度延迟&#xff0c;平均超支达到原始预算的189%。这种系统性失效的根源在于传统工程治理…...