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

【计算机视觉】基于Python的相机标定项目Camera-Calibration深度解析

在这里插入图片描述

基于Python的相机标定项目Camera-Calibration深度解析

    • 1. 项目概述
      • 技术核心
    • 2. 技术原理与数学模型
      • 2.1 相机模型
      • 2.2 畸变模型
    • 3. 实战指南:项目运行与标定流程
      • 3.1 环境配置
      • 3.2 数据准备
      • 3.3 执行步骤
      • 3.4 结果验证
    • 4. 常见问题与解决方案
      • 4.1 角点检测失败
      • 4.2 标定结果异常
      • 4.3 运行时错误
    • 5. 相关论文与技术演进
      • 5.1 经典论文
      • 5.2 前沿方向
    • 6. 项目扩展建议
      • 6.1 功能增强
      • 6.2 性能优化

1. 项目概述

Camera-Calibration是一个基于Python和OpenCV实现的相机标定工具,旨在通过张正友标定法(Zhang’s Method)计算相机的内参矩阵、畸变系数和外参参数。该项目适用于计算机视觉、机器人导航、增强现实(AR)等领域,能够有效校正镜头畸变并建立图像像素坐标与真实世界坐标的映射关系。

技术核心

  • 张正友标定法:通过多视角棋盘格图像计算相机参数,具有高精度和低实现复杂度的特点。
  • OpenCV集成:利用findChessboardCorners检测棋盘格角点,通过calibrateCamera进行参数优化。
  • 非线性优化:采用Levenberg-Marquardt算法最小化重投影误差,确保标定结果的准确性。

2. 技术原理与数学模型

2.1 相机模型

相机的成像模型基于小孔成像原理,数学表达为:
s [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ r 11 r 12 r 13 t x r 21 r 22 r 23 t y r 31 r 32 r 33 t z ] [ X w Y w Z w 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} s uv1 = fx000fy0cxcy1 r11r21r31r12r22r32r13r23r33txtytz XwYwZw1
其中:

  • ( u , v ) (u, v) (u,v)为像素坐标, ( X w , Y w , Z w ) (X_w, Y_w, Z_w) (Xw,Yw,Zw)为世界坐标
  • f x , f y f_x, f_y fx,fy为焦距, ( c x , c y ) (c_x, c_y) (cx,cy)为主点坐标
  • r i j r_{ij} rij t i t_i ti构成旋转矩阵和平移向量(外参)

2.2 畸变模型

径向畸变和切向畸变的校正公式:
x c o r r e c t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y c o r r e c t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{aligned} x_{corrected} &= x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2p_1 xy + p_2(r^2 + 2x^2) \\ y_{corrected} &= y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + p_1(r^2 + 2y^2) + 2p_2 xy \end{aligned} xcorrectedycorrected=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy
其中 k 1 , k 2 , k 3 k_1, k_2, k_3 k1,k2,k3为径向畸变系数, p 1 , p 2 p_1, p_2 p1,p2为切向畸变系数。


3. 实战指南:项目运行与标定流程

3.1 环境配置

# 依赖安装
pip install opencv-python numpy matplotlib

3.2 数据准备

  1. 标定板要求
    • 使用棋盘格(如9×6内角点),打印时需保证1:1比例且平整
    • 每个方格的物理尺寸需精确测量(例如25mm×25mm)
  2. 图像采集
    • 在不同角度、距离下拍摄15-20张图像(覆盖画面中心与边缘)
    • 示例代码自动检测有效图像:
      images = glob.glob('calib_images/*.jpg')
      

3.3 执行步骤

import cv2
import numpy as np# 初始化参数
CHECKERBOARD = (9, 6)  # 内角点行列数
objpoints = []  # 3D点
imgpoints = []  # 2D点# 生成世界坐标系点
objp = np.zeros((CHECKERBOARD[0]*CHECKERBOARD[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, None)if ret:objpoints.append(objp)corners_refined = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))imgpoints.append(corners_refined)# 标定相机
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)

3.4 结果验证

# 校正测试图像
img = cv2.imread('test.jpg')
h, w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)# 计算重投影误差
mean_error = 0
for i in range(len(objpoints)):imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)error = cv2.norm(imgpoints[i], imgpoints2, cv2.NORM_L2)/len(imgpoints2)mean_error += error
print(f"重投影误差: {mean_error/len(objpoints):.2f} 像素")

合格标准:误差应小于1.0像素,理想值在0.5像素以下。


4. 常见问题与解决方案

4.1 角点检测失败

  • 现象findChessboardCorners返回False
  • 原因与解决
    1. 棋盘格尺寸错误:确认CHECKERBOARD设置为内角点数(实际方格数-1)
    2. 图像模糊/反光:调整光照,确保棋盘格清晰可见
    3. 边缘未完全显示:至少需完整显示全部内角点

4.2 标定结果异常

  • 焦距值过大(如fx=42880):
    • 检查物理尺寸单位是否错误(例如将毫米误设为米)
    • 增加图像多样性,覆盖不同视角
  • 畸变校正无效
    • 确认dist系数已正确应用
    • 尝试启用CALIB_RATIONAL_MODEL以支持高阶畸变模型

4.3 运行时错误

# 错误:Assertion failed (dims == 2 && ...)
# 解决:检查objpoints和imgpoints维度一致性
assert len(objpoints) == len(imgpoints), "数据对数量不匹配"

5. 相关论文与技术演进

5.1 经典论文

  1. 张正友标定法(2000):

    • 提出基于平面模板的灵活标定方法,成为OpenCV实现的基础
    • 论文标题:A Flexible New Technique for Camera Calibration
  2. 多传感器标定(2019):

    • 悉尼大学ACFR实验室改进VOQ策略,提升标定鲁棒性

5.2 前沿方向

  • 在线标定:通过SLAM实时更新相机参数
  • 深度学习标定:使用CNN直接估计畸变参数(如DeepCalib)
  • 多相机协同标定:适用于自动驾驶多视角系统

6. 项目扩展建议

6.1 功能增强

  • 自动化数据筛选:根据角点检测质量自动过滤低质量图像
  • GUI交互界面:集成PyQt实现参数可视化调整
  • ROS支持:与camera_calibration包对接,实现标定结果实时发布

6.2 性能优化

  • GPU加速:使用CUDA加速角点检测与图像校正
  • 多线程处理:并行处理图像加载与角点细化

通过本项目实践,开发者不仅能掌握相机标定的核心算法,还能深入理解计算机视觉系统的几何建模原理。结合重投影误差分析与参数优化策略,可进一步提升视觉应用的精度与鲁棒性。

相关文章:

【计算机视觉】基于Python的相机标定项目Camera-Calibration深度解析

基于Python的相机标定项目Camera-Calibration深度解析 1. 项目概述技术核心 2. 技术原理与数学模型2.1 相机模型2.2 畸变模型 3. 实战指南:项目运行与标定流程3.1 环境配置3.2 数据准备3.3 执行步骤3.4 结果验证 4. 常见问题与解决方案4.1 角点检测失败4.2 标定结果…...

彩票假设学习笔记

彩票假设 文章目录 彩票假设一、基本概念1. 核心观点2. 关键要素 二、彩票假设的用途三、训练流程四、意义和局限性1. 意义2. 局限性 五、总结 一、基本概念 彩票假设(Lottery Ticket Hypothesis)是由 Jonathan Frankle 和 Michael Carbin 在 2019 年的…...

《算法导论(第4版)》阅读笔记:p18-p31

《算法导论(第4版)》学习第 11 天,p18-p31 总结,总计 4 页。 一、技术总结 1. Fourier transform(傅里叶变换) In mathematics, the Fourier transform (FT) is an integral transform that takes a function as input then outputs another function…...

编程技能:字符串函数02,strcpy

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数01,引言 回到目录 …...

UOJ 164【清华集训2015】V Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​),另有序列 h h h,初始时 h a ha ha. 有 m m m 个操作分五种: add ⁡ ( l , r , v ) \operatorname{add}(l,r,v) add(l,r,v):…...

数据库备份与策略【全量备份、增量备份、日志恢复】

数据库备份策略与SQL语句实现 一、基础备份SQL语句 1. 全量备份(逻辑备份) -- 备份单个数据库 mysqldump -u [username] -p[password] --single-transaction --routines --triggers --events --master-data2 [database_name] > backup.sql-- 备份…...

基于单片机的电子法频率计

一、电子计数法测频率原理 通过门控控制闸门开关,闸门时间T自己设定,计数器计数脉冲个数N(也就是待测信号),N个脉冲的时间间隔为δt,倒数即为信号的频率f,由此 δtT/N fN/T——信号频率 根据公式,如果考虑…...

day22python打卡

复习日 仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。 作业: 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 kaggle泰坦里克号人员生还预测https://www.kaggle.com/competitions/titanic/…...

前端项目打包部署流程j

1.打包前端项目(运行build这个文件) 2.打包完成后,控制台如下所示:(没有报错即代表成功) 3.左侧出现dist文件夹 4.准备好我们下载的nginx(可以到官网下载一个),然后在一个没有中文路径下的文件夹里面解压。 5.在继承终端内打开我们的项目,找到前面打包好…...

k8s的flannel生产实战与常见问题排查

关于 Kubernetes Flannel 插件的详细教程及生产环境实战指南,涵盖核心概念、安装配置、常见问题排查与优化策略 Flannel通信流程 一、Flannel 概述 Flannel 是 Kubernetes 最常用的 CNI(Container Network Interface)插件之一,…...

Linux `uname` 指令终极指南

Linux `uname` 指令终极指南 一、核心功能解析1. 命令语法2. 基础输出示例二、选项详解与使用场景三、实战应用技巧1. 系统信息快速获取2. 硬件平台验证3. 内核版本比较四、高级调优方法1. 内核编译优化2. 驱动模块管理3. 安全补丁验证五、系统诊断与排查1. 虚拟化环境检测2. 内…...

wget、curl 命令使用场景与命令实践

一、wget 常见场景与命令 定位:专注于 文件下载,支持递归下载、断点续传,适合批量或自动化下载任务。 1. 基础下载 # 下载文件到当前目录(自动命名) wget https://example.com/file.zip# 指定保存文件名 wget -O cu…...

RAII是什么?

RAII(Resource Acquisition Is Initialization,资源获取即初始化)是C编程中的一项非常重要且经典的设计思想,也是现代C资源管理的基石。它主要解决资源的自动管理与释放问题,从而帮助程序员避免资源泄漏、悬空指针等常…...

应急响应基础模拟靶机-security2

PS:杰克创建的流量包(result.pcap)在root目录下,请根据已有信息进行分析 1、首个攻击者扫描端口使用的工具是? 2、后个攻击者使用的漏洞扫描工具是? 3、攻击者上传webshell的绝对路径及User-agent是什么? 4、攻击者反弹shell的…...

【C/C++】const关键词及拓展

✅ C 中的 const 关键字 学习笔记 💡 关键词:常量、编译时常量、性能优化、安全性、C11/C14/C17/C20 特性 🧠 一、const —— 常量修饰符 1.1 定义 const 是 “constant” 的缩写。表示一个变量一旦被初始化,其值就不能再改变。…...

什么是电路耦合以及如何解耦合

耦合(Coupling)是指两个或多个电路之间通过物理连接或电磁场交互产生的能量或信号传递现象。其本质是不同电路模块之间相互影响的机制,可能表现为信号传输、噪声干扰或能量传递。 一、解耦合的核心目标 电源噪声抑制:隔离开关电…...

【软件测试】基于项目驱动的功能测试报告(持续更新)

目录 一、项目的介绍 1.1 项目背景 二、测试目标 2.1 用户服务模块 2.1.1 用户注册模块 2.1.1.1 测试点 2.1.1.2 边界值分析法(等价类+边界值) 2.1.1.2.1 有效等价类 2.1.1.2.2 无效等价类 2.1.1.2.3 边界值 2.1.1.2.4 测试用例设计 2.1.2 用户登录 2.1.2.1 测试…...

Java面试常见技术问题解析

Java面试常见技术问题 1. Java基础 1.1 Java的特点是什么? Java是一种面向对象的编程语言,具有跨平台性、健壮性、安全性、多线程支持等特点。 1.2 什么是面向对象? 面向对象是一种编程范式,通过类和对象来组织代码&#xff…...

弹性Reasoning!通过RL训练控制推理预算,提升模型的推理能力和效率!

摘要:大型推理模型(LRMs)通过生成扩展的思维链(CoT)在复杂任务上取得了显著进展。然而,它们不受控制的输出长度对于实际部署构成了重大挑战,在实际部署中,对令牌、延迟或计算的推理时…...

Spyglass:在batch/shell模式下运行目标的顶层是什么?

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 除了可以在图形用户界面(GUI)中运行目标外,使用Batch模式或Shell模式也可以运行目标,如下面的命令所示。 % spyglass -project test.prj -ba…...

新手在使用宝塔Linux部署前后端分离项目时可能会出现的问题以及解决方案

常见问题与解决方案 1. 环境配置错误 问题:未正确安装Node.js/Python/JDK等运行时环境解决: 通过宝塔面板的软件商店安装所需环境验证版本: node -v # 查看Node.js版本 python3 --version # 查看Python3版本2. 端口未正确开放 问题&am…...

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十七)

个人笔记整理---仅供参考 第十七章项目干系人管理 17.1管理基础 17.2项目干系人管理过程 17.3识别干系人 17.4规划干系人参与 17.5管理人干系人参与 17.6监督干系人参与...

AI日报 · 2025年05月11日|传闻 OpenAI 考虑推出 ChatGPT “永久”订阅模式

1、Anthropic API 集成网页搜索功能,赋能 Claude 模型实时信息获取与研究能力 Anthropic 公司近日宣布,为其应用程序接口(API)引入了网页搜索工具,显著增强了旗下 Claude 系列模型获取和利用实时信息的能力。这一更新…...

【和春笋一起学C++】数组名作为函数参数实例

接上篇文章《【和春笋一起学C】函数——C的编程模块》,当使用数组名作为函数形参时,数组名会退化为指针,实际传递的是数组首元素的地址。 数组名在大多数情况下会退化为指针,以下两种情况除外: 当使用sizeof运算符时&a…...

多智体具身人工智能:进展与未来方向(上)

25年5月来自北理工、南大、西安交大、浙大和同济大学的论文“Multi-Agent Embodied AI: Advances And Future Directions”。 具身人工智能(Embodied AI)在智能时代先进技术的应用中扮演着关键角色。在智能时代,人工智能系统与物理实体相融合…...

C++类和对象--初阶

C类和对象—初阶 01. 面向对象与面向过程深度对比 面向过程:以过程为中心,关心问题解决的步骤。执行效率高,适合简单问题,内存占用小。但是代码复杂性高,维护成本高。 线性流程:点餐 → 烹饪 → 上菜 → …...

sunset:Solstice靶场

sunset:Solstice https://www.vulnhub.com/entry/sunset-solstice,499/ 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.244 3&#xff…...

1247. 后缀表达式

面白i题 ahh 我这朱脑子是写不出来的。大牛分析&#xff1a; 我的ac代码&#xff1a; #include<iostream> using namespace std; int ma-1e91,mi1e91; long long sum; long long sum1; int main(){int n,m; scanf("%d%d",&n,&m);for(int i0;i<(nm…...

基础框架搭建流程指南

一、搭建前准备阶段 1. 明确需求目标 确定业务场景类型&#xff08;Web/APP/微服务等&#xff09; 分析核心功能与非功能性需求&#xff08;性能/安全性/扩展性&#xff09; 预估用户量级与并发压力 2. 技术选型决策 开发语言选择&#xff08;Java/Python/Go等&#xff09…...

Vue.js 全局导航守卫:深度解析与应用

在 Vue.js 开发中&#xff0c;导航守卫是一项极为重要的功能&#xff0c;它为开发者提供了对路由导航过程进行控制的能力。其中&#xff0c;全局导航守卫更是在整个应用的路由切换过程中发挥着关键作用。本文将深入探讨全局导航守卫的分类、作用以及参数等方面内容。 一、全局…...

微服务架构实战:从服务拆分到RestTemplate远程调用

微服务架构实战&#xff1a;从服务拆分到RestTemplate远程调用 一 . 服务拆分1.1 服务拆分注意事项1.2 导入服务拆分 Demo1.3 小结 二 . 服务间调用2.1 注册 RestTemplate2.2 实现远程调用2.3 小结 三 . 提供方和消费方 在分布式系统设计中&#xff0c;微服务架构因其灵活性、可…...

10.二叉搜索树中第k小的元素(medium)

1.题目链接&#xff1a; 230. 二叉搜索树中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09;230. 二叉搜索树中第 K 小的元素 - 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数…...

八股文-js篇

八股文-js篇 1. 延迟执行js的方式2. js的数据类型3. null 和 undefined的区别4. 和 的区别5. js微任务和宏任务6. js作用域7. js对象9. JS作用域this指向原型8. js判断数组9. slice作用、splice是否会改变原数组10. js数组去重11. 找出数组最大值12. 给字符串新增方法实现功能…...

Nipype使用:从安装配置到sMRI处理

Nipype使用&#xff1a;从安装配置到sMRI处理 Nipype使用&#xff1a;从安装配置到sMRI处理一、Nipype及其依赖工具安装配置1.1 Nipype安装1.2 依赖工具安装与配置1.2.1 FreeSurfer1.2.2 ANTS1.2.3 FSL1.2.4 dcm2nii/MRIConvert 1.3 环境变量配置 二、Nipype进行sMRI预处理2.1 …...

常用的rerank模型有哪些?都有什么优势?

常用的Rerank模型分类及优势分析 重排序(Rerank)模型在信息检索、推荐系统、问答系统等场景中发挥关键作用,通过优化初步检索结果提升最终输出的相关性。以下是当前主流的Rerank模型分类及其核心优势的详细分析: 一、基于大语言模型(LLM)的Rerank模型 代表性模型: Ran…...

LLM框架

LLM&#xff08;Large Language Model&#xff0c;大型语言模型&#xff09;框架是一类用于开发、部署和优化大型语言模型的工具和平台。它们在自然语言处理&#xff08;NLP&#xff09;和人工智能&#xff08;AI&#xff09;领域中发挥着重要作用&#xff0c;帮助开发者高效地…...

SaaS场快订首页的前端搭建【持续更新】

文章目录 一、创建页面二、配置路由三、写接口文件&#xff08;api&#xff09;1.定位的接口函数&#xff08;腾讯地图api&#xff09;实现代码&#xff1a; 2.获取场馆分类的数据3.获取附近场馆列表的数据 四、开发首页页面1.顶部区域2.搜索框3.场馆分类4.附近场馆列表 五、难…...

2025第九届御网杯网络安全大赛线上赛 区域赛WP (MISC和Crypto)(详解-思路-脚本)

芜湖~ 御网杯线上分是越来越精细 区域赛都有了 然后不过多评价 整体不算难 以下是我自己的一些思路和解析 有什么问题或者建议随时都可以联系我 目录 芜湖~ MISC #被折叠的显影图纸 #光隙中的寄生密钥 #ez_xor #套娃 #easy_misc #ez_pictre Crypto #easy签到题 …...

HTTP/1.1 host虚拟主机详解

一、核心需求&#xff1a;为什么需要虚拟主机&#xff1f; 在互联网上&#xff0c;我们常常希望在一台物理服务器&#xff08;它通常只有一个公网 IP 地址&#xff09;上运行多个独立的网站&#xff0c;每个网站都有自己独特的域名&#xff08;例如 www.a-site.com​, www.b-s…...

低代码开发:开启软件开发的新篇章

摘要 低代码开发作为一种新兴的软件开发方式&#xff0c;正在迅速改变传统软件开发的模式和效率。它通过可视化界面和预设的模板&#xff0c;使非专业开发者也能够快速构建应用程序&#xff0c;极大地降低了开发门槛和成本。本文将深入探讨低代码开发的定义、优势、应用场景以及…...

HVV蓝队初级面试总结

一、技术面&#xff1a; 1-SQL注入原理 1-WEB应用程序对用户输入的数据 2-没有过滤或者过滤的不严谨 3-并且把用户输入的数据当作SQL 语司 4-带入到数据中去执行2-SQL注入分类 1-回显型 2-无回显型/盲注1-联合查询注入unionselect 2-堆叠注入&#xff1b; 3-报错注入upda…...

C++八股——函数对象

文章目录 一、仿函数二、Lambda表达式三、bind四、function 一、仿函数 仿函数&#xff1a;重载了操作符()的类&#xff0c;也叫函数对象 特征&#xff1a;可以有状态&#xff0c;通过类的成员变量来存储&#xff1b;&#xff08;有状态的函数对象称之为闭包&#xff09; 样…...

Typora自动对其脚注序号

欢迎转载&#xff0c;但请标明出处和引用本文地址 Markdown中的脚注 脚注引用&#xff1a;[^2] 脚注定义&#xff1a;[^2]: xxxxxxx 问题&#xff1a;脚注需要 使用者自己定义排序。写作过程中&#xff0c;在文章最前面引用脚注序号&#xff0c;需要递增其后所有的脚注引用&…...

【Android】cmd命令

Android中cmd命令可以用来向binder服务发送命令&#xff0c;来进行相关调试&#xff0c; 其实现原理是调用binder服务的command接口 frameworks/native/cmds/cmd/cmd.cpp 209 Vector<String16> args; 210 for (int i2; i<argc; i) { 211 args.add(Stri…...

【入门】打印字母塔

描述 输入行数N,打印图形. 输入描述 输入只有一行&#xff0c;包括1个整数。(N<15) 输出描述 输出有N行. #include <bits/stdc.h> using namespace std; int main() { char t;int n,f;cin>>n;for(int i1;i<n;i){tchar(65i);for(int j1;j<n-i;j){cout…...

基于OpenCV的人脸识别:LBPH算法

文章目录 引言一、概述二、代码实现1. 代码整体结构2. 导入库解析3. 训练数据准备4. 标签系统5. 待识别图像加载6. LBPH识别器创建7. 模型训练8. 预测执行9. 结果输出 三、 LBPH算法原理解析四、关键点解析五、改进方向总结 引言 人脸识别是计算机视觉领域的一个重要应用&…...

opencascade.js stp vite webpack 调试笔记

Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...

使用go开发安卓程序

因为使用传统的安卓开发方式对于非专业人士来说比较繁琐&#xff0c;所以这里想用go简单的开发一下安卓程序。go支持安卓的项目就叫gomobile&#xff0c;有写安卓库文件和安卓程序两种方式&#xff0c;写安卓程序只能使用OPENGL画图。 一、安装步骤 参考文档&#xff1a;用Go…...

嵌入式中屏幕的通信方式

LCD屏通信方式详解 LCD屏&#xff08;液晶显示屏&#xff09;的通信方式直接影响其数据传输效率、显示刷新速度及硬件设计复杂度。根据应用场景和需求&#xff0c;LCD屏的通信方式主要分为以下三类&#xff0c;每种方式在协议类型、数据速率、硬件成本及适用场景上存在显著差异…...

常见的 DCGM 设备级别指标及其含义

前言 在大规模 GPU 集群运维与性能调优中&#xff0c;精准、全面地了解每块显卡的运行状态和健康状况至关重要。NVIDIA 数据中心 GPU 管理 (DCGM) 提供了一系列关键指标&#xff0c;用于监控显存错误、硬件利用率、温度、能耗以及互联带宽等多维度信息。通过对这些指标的持续采…...