OpenCV 寻找棋盘格角点及绘制

目录

一、概念

二、代码

2.1实现步骤

2.2完整代码

三、实现效果


一、概念

        寻找棋盘格角点(Checkerboard Corners)是计算机视觉中相机标定(Camera Calibration)过程的重要步骤。

        OpenCV 提供了函数 cv2.findChessboardCorners 来检测棋盘格图像中的角点,该函数会从图像的左上角开始扫描,以一定的步长(步长由棋盘格的大小和图像分辨率决定)逐行或逐列地寻找具有棋盘格特征的区域。在找到棋盘格特征后,函数会进一步处理这些区域,确定精确的角点位置,并按照从左到右、从上到下的顺序排列这些角点。这些角点用于标定相机内参和畸变系数。

二、代码

2.1实现步骤

1.图像预处理:

  • 将图像转换为灰度图像,因为角点检测在灰度图像上更有效。
  • 如果图像有噪声,可以使用滤波器进行平滑处理。

2.角点检测:

  • 使用 Harris 角点检测或其他基于梯度的检测方法,找到图像中的所有角点。
  • 通过几何约束(如角点之间的固定间距)筛选出棋盘格的角点。

3.亚像素级精度优化:

  • 使用 cv2.cornerSubPix 对检测到的角点进行优化,提高角点位置的精度。

2.2完整代码

import cv2
import numpy as np
import glob

# 定义棋盘格的大小(内角点的个数)
chessboard_size = (11, 8)  # 11x8的棋盘格

# 图像文件路径
image_files = glob.glob('file_path/*.png')  # 替换为实际图像文件路径模式

# 检测并绘制棋盘格角点
for image_file in image_files:
    # 读取图像
    image = cv2.imread(image_file)
    if image is None:
        print(f"Image at {image_file} not found or failed to read")
        continue

    # 将图像转换为灰度图像
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 寻找棋盘格的角点
    ret, corners = cv2.findChessboardCorners(gray_image, chessboard_size, None)

    # 如果找到角点,则绘制它们
    if ret:
        # 优化角点位置
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
        corners2 = cv2.cornerSubPix(gray_image, corners, (11, 11), (-1, -1), criteria)

        # 绘制角点
        cv2.drawChessboardCorners(image, chessboard_size, corners2, ret)

        # 为每个角点添加数字标签
        for i, corner in enumerate(corners2):
            corner = tuple(map(int, corner.ravel()))  # 确保corner是一个包含两个整数值的元组
            cv2.putText(image, str(i+1), corner, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1, cv2.LINE_AA)
        # 显示结果
        cv2.imshow('Chessboard Corners', image)
        # 等待用户按下 ESC 键(ASCII 码 27)关闭窗口
        while True:
            if cv2.waitKey(100) == 27:  # 每 0.1 秒检查一次
                break
        # cv2.waitKey(500)  # 等待500毫秒,显示下一张图像
    else:
        print(f"Chessboard corners not found in image {image_file}")

cv2.destroyAllWindows()

三、实现效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】 已解决:ModuleNotFoundError: No module named…

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named… 一、分析问题背景 在使用Python进行开发时,有时会遇到“ModuleNotFoundError: No module named…”这样的…

做突破交易时,需要注意的进场细节有哪些?

突破交易揭示了市场未来的走向。 在这种情况下,面对市场时我们应该如何入场操作呢?接下来,让我们来细化一下实施的具体步骤。 01. 在交易中,周期的考量比价格突破更为关键。 当价格突破发生时,市场的平静被打破&#x…

非线性系列(三)—— 非线性求解器算法分类

1. 总体认知 CAE中的非线性方程组求解主要依赖牛顿法(及牛顿法的变体),步骤如下 以线搜索方法为例,流程如下: 2. 方法分类 适用范围大类小类描述牛顿法雅可比矩阵难获取拟牛顿法 Broyden(Secant method)、…

评估测试用例有效性 5个方面

评估测试用例的有效性是确保软件测试活动能够达到预期目标的关键步骤,有助于测试团队优化测试计划,提高测试效率,减少返工,节省成本。如果缺乏对测试用例的有效性评估,可能会导致测试用例无法覆盖关键功能点&#xff0…

客户​青海地区图像识别,云拍产品实施安装#数采物联

客户青海地区图像识别,云拍产品实施安装。#数采物联。 客户青海地区图像识别,云拍产品实施安装。#数采物联。

系统服务综合作业

首先配置自动挂载 服务器的/rhce 自动挂载在客服端的/nfs/rhce 首先在服务器进行配置 dnf install nfs-utils -y [rootlocalhost ~]# vim /etc/exports [rootlocalhost ~]# firewall-cmd --permanent --add-servicenfs success [rootlocalhost ~]# firewall-cmd --permanen…

【人工智能】Transformers之Pipeline(概述):30w+大模型极简应用

​​​​​​​ 目录 一、引言 二、pipeline库 2.1 概述 2.2 使用task实例化pipeline对象 2.2.1 基于task实例化“自动语音识别” 2.2.2 task列表 2.2.3 task默认模型 2.3 使用model实例化pipeline对象 2.3.1 基于model实例化“自动语音识别” 2.3.2 查看model与task…

数据结构——约瑟夫环C语言链表实现

约瑟夫环问题由古罗马史学家约瑟夫(Josephus)提出,他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”,约瑟夫则想“留得青…

双栈实现一个队列

两个栈可实现将列表倒序:设有含三个元素的栈 A [1,2,3] 和空栈 B [] 。若循环执行 A 元素出栈并添加入栈 B ,直到栈 A 为空,则 A [] , B [3,2,1] ,即栈 B 元素为栈 A 元素倒序。 利用栈 B 删除队首元素:倒序后&am…

FreeCAD: 将STL格式文件转换为step格式文件的记录

首先我们需要下载开源的FreeCAD软件,官网链接如下: FreeCAD: Your own 3D parametric modeler 傻瓜式安装,跳过~ FreeCAD 是一款免费的开源CAD软件,支持多种文件格式转换,包括STL到STEP。 步骤: 打开Free…

DAY2:插件学习

文章目录 插件学习ClangGoogle TestCMakeDoxygen 收获 插件学习 Clang 是什么:Clang 是指 LLVM 项目的编译器的前端部分,支持对 C 家族语言(C、C、Objective-C)的编译。Clang 的功能包括:词法分析、语法分析、语义分析、生成中间中间代码 L…

国产大模型第一梯队玩家,为什么pick了CPU?

AI一天,人间一年。 现在不论是大模型本身,亦或是AI应用的更新速度简直令人直呼跟不上—— Sora、Suno、Udio、Luma……重磅应用一个接一个问世。 也正如来自InfoQ的调查数据显示的那般,虽然AIGC目前还处于起步阶段,但市场规模已…

maven 依赖冲突

依赖冲突 1、对于 Maven 而言&#xff0c;同一个 groupId 同一个 artifactId 下&#xff0c;只能使用一个 version。 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 --><dependency><groupId>org.apache.commons</groupId&…

C++初学者指南-5.标准库(第一部分)--顺序容器

C初学者指南-5.标准库(第一部分)–顺序容器 文章目录 C初学者指南-5.标准库(第一部分)--顺序容器标准顺序容器常见特点规律性&#xff1a;复制&#xff0c;分配&#xff0c;比较类型推导(C17)常用接口部分 array<T,size>vector\<T>C 的默认容器快速回顾迭代器范围插…

解决多个栅格行列数不一致,无法对齐方法

最近在处理栅格数据&#xff0c;要求做空间关联分析。检查数据后发现多个栅格数据像元大小以及行列数不一致&#xff0c;导致出现这种原因是由于数据来源不一致以及数据精度不同导致的&#xff0c;在做空间关联分析前&#xff0c;需要对数据预处理。 一、准备工作 &#xff08…

【ArcGIS 小技巧】为国空用地字段设置属性域,快速填充属性值并减少出错

属性域属性是描述字段类型可用值的规则。可用于约束表或要素类的任意特定属性中的允许值。——ArcGIS Pro 帮助文档 简单理解属性域&#xff1a;对于一个含义为性别的字段&#xff0c;我们一般会给的属性值有男、女两种。我们可以将这两种属性值制作成属性域并指定给该字段&…

Mysql如何高效ALTER TABL

ALTER TABLE 缺点 MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题。 MySQL MySQL 执行大部分修改表结构操作的方法是用新结构的 创建一个&#xff0c;空表从旧表中查出所有数据插入&#xff0c;新表然后删除旧。表这样操作可能需要花费很长&#xff0c;时间 如内果存不…

剪画小程序:父辈的照片模糊不清晰,怎么变清晰!

在我们的记忆深处&#xff0c;父辈和爷爷辈的影像总是伴随着一些模糊不清晰的老照片。这些照片或许没有现代摄影技术的高清与细腻&#xff0c;但它们却承载着无比厚重的岁月痕迹和情感温度。 每一张模糊的老照片&#xff0c;都是时光的切片。它们可能是父辈年轻时的纯真笑容&am…

redis批量删除keys,用lua脚本。

文章目录 现象解决方法 现象 系统报错&#xff1a; misconf redis is configured to save ....后查看机器内存。 是内存满了&#xff0c;需要删除其中的key 解决方法 (1) 编写一个脚本&#xff0c;放在redis-cli.exe同一个目录 (2) 脚本内容如下&#xff1a; -- 使用Lua脚…