OPENCV+PYTHON 棋盘格的函数

提问 文心一言:

OPENCV+PYTHON 棋盘格的函数

答案:

在 OpenCV 和 Python 中,棋盘格(Chessboard)常用于相机标定(Camera Calibration)中,因为它提供了一种已知图案,用于计算相机的内部参数和外部参数。棋盘格图案通常由交替的黑白方块组成。

以下是一些常用的与棋盘格相关的函数和步骤:

    1. 生成棋盘格图像:
      虽然通常使用预打印的棋盘格图案,但你也可以使用 OpenCV 生成一个棋盘格图像。
import cv2
import numpy as npdef generate_chessboard(squares_per_row, squares_per_col, square_size):# 棋盘格的大小rows = squares_per_row + 1cols = squares_per_col + 1# 创建一个空白图像img = np.ones((rows * square_size, cols * square_size, 3), dtype=np.uint8) * 255for i in range(squares_per_row + 1):for j in range(squares_per_col + 1):if (i + j) % 2 == 0:# 填充黑色方块
                cv2.rectangle(img, (j * square_size, i * square_size), ((j + 1) * square_size, (i + 1) * square_size), 0, -1)return img
# 生成一个8x11 棋盘格(棋盘格的大小:内部角点的数量),每个方块大小为 50 像素
# 即生成一个有9x12 方格 的棋盘格(棋盘格的大小:方块的数量),每个方块大小为 50 像素
chessboard_img = generate_chessboard(8, 11, 50)
cv2.waitKey(0) cv2.destroyAllWindows()
    1. 找到棋盘格角点:
      使用 cv2.findChessboardCorners 函数来检测棋盘格的角点。
import cv2# 棋盘格的大小 (内部角点的数量)
chessboard_size = (8, 11)# 读取棋盘格图像
img = cv2.imread('chessboard.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 找到棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)# 如果找到角点,则绘制并显示它们
if ret:img = cv2.drawChessboardCorners(img, chessboard_size, corners, ret)cv2.imshow('Chessboard Corners', img)cv2.waitKey(0)cv2.destroyAllWindows()
else:print("Chessboard corners not found")
    1. 相机标定:
      使用 cv2.calibrateCamera 函数进行相机标定。这需要使用多张从不同角度拍摄的棋盘格图像。
import cv2
import numpy as np
import glob# 棋盘格的大小 (内部角点的数量)
chessboard_size = (8, 6)# 准备对象点 (例如 (0,0,0), (1,0,0), (2,0,0), ....,(7,5,0))
objp = np.zeros((chessboard_size[0] * chessboard_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)# 存储所有图像的对象点和图像点
objpoints = []  # 3d 点在真实世界空间
imgpoints = []  # 2d 点在图像平面# 读取所有棋盘格图像
images = glob.glob('chessboard_images/*.jpg')for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 找到棋盘格角点ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)# 如果找到角点,则添加对象点和图像点if ret:objpoints.append(objp)imgpoints.append(corners)# 标定相机
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)print("相机矩阵:\n", mtx)
print("畸变系数:\n", dist)

以上代码展示了如何生成棋盘格图像、检测棋盘格角点以及进行相机标定。注意,相机标定通常需要多张从不同角度拍摄的棋盘格图像,因此请确保你有足够的图像来进行标定。

 

提问:如何校正原图像

import cv2
import numpy as np# 假设你已经通过cv2.calibrateCamera得到了mtx和dist
# mtx是相机内参矩阵,dist是畸变系数
# img是你想要校正的原图像# 读取图像(这里以灰度图像为例,但也可以是彩色图像)
img = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_GRAYSCALE)
# 如果是彩色图像,使用cv2.IMREAD_COLOR
# img = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_COLOR)# 使用cv2.undistort函数校正图像
# 注意:如果img是彩色图像,你需要将每个通道分别校正,但OpenCV通常会自动处理这一点
undistorted_img = cv2.undistort(img, mtx, dist)# 显示校正前后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Undistorted Image', undistorted_img)
cv2.waitKey(0)
cv2.destroyAllWindows()# 保存校正后的图像(可选)
cv2.imwrite('undistorted_image.jpg', undistorted_img)

 

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

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

相关文章

【每日一题】20250203

你是万千星球的星球! 你是沸腾的准则!你是精心保存的潜伏的萌芽!你是核心!【每日一题】我国发射的“天宫一号”和“神州八号”在对接前,”天宫一号”的运行轨道高度为 \(350 \; \mathrm{km}\),“神州八号”的运行轨道高度为 \(343 \; \mathrm{km}\).它们的运行轨道均视为…

题解:P11637 Mod

题解:P11637 Mod 题目传送门 思路 一种比较简单的方法。 根据题意,我们可以发现在若干次操作后 \(a\) 能变成 \(0\) 的情况下,操作次数为 \(p-a\)。因为 \(b\) 的操作次数与 \(a\) 相同,所以 \(b\) 的值为 \(b-(p-a)\)。因为题面中要求 \(b\) 为一个自然数,所以自然就分成…

如何在markdown中写出横线除号

在 Markdown 中,您可以使用支持 LaTeX 数学公式的环境来表示“除数在上面,被除数在下面”的数学公式形式。以下是具体方法: 1. 使用分数形式 用 LaTeX 的 \frac 表达分数(除号的形式): 块级公式: $$\frac{a}{b}$$内联公式: $\frac{a}{b}$2. 使用纯文本的替代表示法 如果…

彻底搞懂分布式事务 XA 模式

原文地址: https://developer.aliyun.com/article/783796 简介: XA 协议是由 X/Open 组织提出的分布式事务处理规范,主要定义了事务管理器 TM 和局部资源管理器 RM 之间的接口。目前主流的数据库,比如 oracle、DB2 都是支持 XA 协议的。作者 | 朱晋君来源 | 阿里巴巴云原生…

.net6-jwt实现认证和自定义策略授权

场景 客户端根据用户名和密码访问登录接口获取token,服务端登录接口获取账号和密码进行验证,获取用户的角色,若角色是超级管理员则只能授权访问标记为超级管理员的接口,若角色是管理员则只能授权访问标记为管理员的接口。 实现JWT认证 安装JWT包 Microsoft.AspNetCore.Auth…

「ZJOI2017」树状数组 题解

前言 题目链接:洛谷;UOJ;LOJ。 UOJ 上有很强的数据。 题意简述 yzh 做 OI 题维护序列 \(\{a_n\}\)。 她实现了一个后缀和查询函数 \(\displaystyle f(x) = \begin{cases} 0 & \text{ if } x=0 \\ \sum\limits_{i=x}^n a_i & \text{ otherwise } \end{cases}\),和…

什么是SDK?

1. 什么是SDK?1.1. SDK的定义 1.2. SDK的组成 1.3. 举例说明1.3.1. 【示例一】 OpenCV 1.3.2. 【示例二】 JDK 1.3.3. 【示例三】微信SDK2. SDK与API2.1. 什么是API? 2.2. SDK与API的关系3. 什么是SDK开发?3.1. SDK开发包含哪些过程? 3.2. SDK开发的目标是什么? 3.3. SDK开…

小蚁摄像头通过rclone+alist实现监控视频自动上传至云盘

最近,我才发现我白嫖的一刻相册空间才到5g于是就想着把监控录制的视频全传到里面可是,这么搞好像有点麻烦,能不能让我的摄像头自己上传呢? 我的摄像头的型号是小蚁 1080p,刷入了yi-hack-v5 alist 开启ftp yi-hack-v5 ftp界面结果发现不行,放弃了 又看到这位老哥的samba方…

材料检测取样手册系统

为方便查询,特写了查询系统,支持桌面版和网页版,支持Excel导入数据库,支持数据库导出Excel,支持数据库备份,支持恢复数据库。数据库为MySQL

《操作系统真象还原》第十二章 进一步完善内核

本文是对《操作系统真象还原》第十二章学习的笔记,欢迎大家一起交流,目前所有代码已托管至 fdx-xdf/MyTinyOS 。第十二章 进一步完善内核 本文是对《操作系统真象还原》第十二章学习的笔记,欢迎大家一起交流,目前所有代码已托管至 fdx-xdf/MyTinyOS 。 实现系统调用 getpid…

深度学习(RNN,LSTM,GRU)

三个网络的架构图: RNN:LSTM:GRU:特性对比列表:特性RNNLSTMGRU门控数量无3门(输入/遗忘/输出)2门(更新/重置)记忆机制 仅隐藏状态ht显式状态Ct + 隐藏状态ht隐式记忆(通过门控更新状态)核心操作 直接状态传递门控细胞状态更新 门控候选状态混合 计算复杂度O(d2)(1组权…