OpenCV 寻找棋盘格角点及绘制

目录

一、概念

二、代码

2.1实现步骤

2.2完整代码

三、实现效果


一、概念

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

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

二、代码

2.1实现步骤

1.图像预处理:

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

2.角点检测:

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

3.亚像素级精度优化:

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

2.2完整代码

python 复制代码
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()

三、实现效果

相关推荐
我叫黑大帅2 小时前
如何通过 Python 实现招聘平台自动投递
后端·python·面试
其实防守也摸鱼3 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
砚底藏山河3 小时前
Python量化开发:2026最佳实时股票数据API接口推荐与对比
开发语言·windows·python
__Wedream__3 小时前
ICMR2024 | 当对比学习遇上知识蒸馏:轻量超分模型压缩新框架
人工智能·深度学习·计算机视觉·知识蒸馏·超分辨率重建·对比学习
研究点啥好呢4 小时前
专为求职者开发的“面馆”!!!摆脱面试焦虑!!!
python·面试·开源·reactjs·求职招聘·fastapi
浅念-4 小时前
刷穿LeetCode:BFS 解决 Flood Fill 算法
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
做cv的小昊4 小时前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
DFT计算杂谈4 小时前
自动化脚本一键绘制三元化合物相图
java·运维·服务器·开发语言·前端·python·自动化
EW Frontier5 小时前
6G ISAC新范式:基于智能漏波天线的Wi‑Fi通感一体化系统设计与实测【附MATLAB+python代码】
开发语言·python·matlab·music·isac·doa·wi‑fi