当前位置: 首页 > 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…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...