自动驾驶小白必看:用Python+OpenCV实现摄像头内参标定的完整流程(附代码)

第六篇【传奇开心果系列】Python的OpenCV库技术点案例示例:摄像头标定_opencv python 标定 OpenCV是一个广泛使用的计算机视觉库,提供了许多功能用于图像处理和计算机视觉任务。其中包括摄像头标定功能,用于获取摄像头的内部和外部参数,以及立体视觉标定功能,用于获得立体相机系统的参数。OpenCV提供了一些函数和工具来进行摄像头内外参数标定。其中最常用的是函数,它使用棋盘格图像或其他已知的三维模型来估计摄像头的内部和外部参数。通过采集一系列不同姿态的棋盘格图像,并提供棋盘格的尺寸,函数可以计算出摄像头的参数矩阵、畸变系数等。 阅读详情

从零到一:用Python与OpenCV实战摄像头内参标定

如果你刚刚踏入自动驾驶或计算机视觉领域,面对“摄像头标定”这个词,可能会觉得它高深莫测,充满了复杂的数学公式和抽象概念。别担心,我最初接触时也有同样的感觉。摄像头标定,尤其是内参标定,听起来像是实验室里的精密操作,但实际上,它更像是一场精心准备的“相机体检”——我们通过一系列标准化的“动作”,来了解我们手中这个视觉传感器的“视力”究竟如何。无论是用于车辆感知的环境重建、高精度测距,还是机器人导航,一个准确的摄像头内参都是所有后续工作的基石。本文将彻底抛开令人望而生畏的理论推导,带你亲手完成一次完整的摄像头内参标定。我们将使用Python和OpenCV,从环境搭建开始,一步步走到结果分析,确保你不仅能跑通代码,更能理解每一步背后的“为什么”。

1. 准备工作:搭建你的标定实验室

在开始任何实验之前,准备好合适的“手术台”和“手术器械”至关重要。摄像头标定对环境的要求并不苛刻,但一些细节的疏忽会导致标定结果偏差巨大,甚至失败。

首先,你需要一个待标定的摄像头。这可以是笔记本电脑自带的前置摄像头、一个USB外接摄像头,甚至是你的手机摄像头(通过某些应用将视频流传输到电脑)。对于自动驾驶应用模拟,一个广角摄像头会更贴近真实场景。我建议初学者从一个普通的网络摄像头开始,它的畸变通常比较明显,标定效果也更易于观察。

接下来是标定板,它是这次“体检”的“视力表”。最常用的是棋盘格标定板。你需要准备一张高精度的棋盘格图案。这里有几个关键参数:

  • 棋盘格内角点数量:指的是棋盘内部黑白方格相交的点。例如,一个8x6的棋盘格,其内角点就是7x5(因为角点位于内部方格交点)。常见的规格有9x6、8x6、7x5等。
  • 方格尺寸:每个黑白方格的实际物理尺寸,例如25mm x 25mm。这个尺寸必须精确测量,因为它是连接图像像素世界和真实物理世界的唯一桥梁。

提示:你可以使用任何图像编辑软件(如Photoshop、GIMP)或在线生成器制作棋盘格图,但务必确保打印时没有缩放,并且方格边缘清晰、对比度高。将其粘贴在一块平整的硬纸板或亚克力板上,可以保证标定板的刚性。

软件环境方面,我们需要Python和OpenCV。我强烈建议使用Anaconda来管理环境,它能避免很多依赖冲突的麻烦。

# 创建一个新的conda环境(可选但推荐)
conda create -n camera_calib python=3.8
conda activate camera_calib

# 安装核心库
pip install opencv-python opencv-contrib-python numpy matplotlib

安装完成后,可以通过一个简单的Python脚本来测试环境是否就绪:

import cv2
import numpy as np
print(f"OpenCV版本: {cv2.__version__}")
print(f"NumPy版本: {np.__version__}")
# 尝试读取一张测试图片(请确保路径正确)
# img = cv2.imread('test.jpg')
# if img is not None:
#     print("图像读取成功,环境准备就绪!")

2. 图像采集:为标定准备高质量的“体检样本”

采集标定图像是整个流程中最需要耐心和技巧的环节。图像质量直接决定了标定参数的准确性。你的目标是采集15到25张覆盖摄像头整个视野、不同角度和距离的棋盘格图像。

采集时的核心要点:

  1. 全方位覆盖:让标定板出现在画面的各个位置——中心、四个边角、上下左右。同时,要改变标定板相对于摄像头的姿态,包括平放、倾斜、旋转等。想象你在用摄像头从不同角度观察这个棋盘格。
  2. 保持清晰:确保每一张图像中的棋盘格都是清晰的,没有运动模糊。光照要均匀,避免强烈的反光或阴影覆盖角点。
  3. 改变距离:采集一些近距离的图片(棋盘格几乎充满画面)和一些远距离的图片(棋盘格较小)。这有助于标定算法更好地估计焦距。
  4. 避免对称性:不要只让标定板平行于图像平面(正对着摄像头),多一些三维空间的旋转姿态。

下面是一个简单的图像采集脚本,它可以帮助你实时查看画面并手动保存合格的图像:

import cv2
import os

# 创建保存图像的文件夹
save_dir = "calibration_images"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

cap = cv2.VideoCapture(0)  # 0代表默认摄像头
img_count = 0

print("按 's' 键保存当前帧,按 'q' 键退出采集。")

while True:
    ret, frame = cap.read()
    if not ret:
        break

    # 实时显示画面
    display = frame.copy()
    cv2.putText(display, f"Saved: {img_count}", (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow('Calibration Image Capture', display)

    key = cv2.waitKey(1) & 0xFF
    if key == ord('s'):
        # 保存图像
        img_name = os.path.join(save_dir, f"calib_{img_count:03d}.jpg")
        cv2.imwrite(img_name, frame)
        print(f"图像已保存: {img_name}")
        img_count += 1
    elif key == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

采集完成后,花点时间快速浏览一遍所有图片,剔除那些模糊、棋盘格未被完整拍摄或姿态过于极端的图片。通常,保留20张左右高质量的图像就足够了。

3. 核心标定:编写并理解你的标定脚本

现在,我们来到了最核心的部分——编写标定脚本。OpenCV已经为我们封装好了强大的标定函数,我们的任务是正确地组织数据并调用它们。

整个标定过程可以分解为以下几个步骤:

  1. 准备对象点:在真实世界坐标系中,定义棋盘格角点的三维坐标。我们通常假设棋盘格在Z=0的平面上,X和Y坐标由方格尺寸决定。
  2. 检测图像点:在每一张采集的图像中,使用OpenCV的findChessboardCorners函数自动找出棋盘格的内角点。
  3. 细化角点:为了提高角点检测的亚像素精度,使用cornerSubPix函数进行优化。
  4. 执行标定:调用calibrateCamera函数,输入所有图像的对象点和图像点,计算摄像头的内参矩阵、畸变系数、旋转和平移向量。
  5. 评估误差:计算重投影误差,这是一个衡量标定精度的关键指标。

让我们来看完整的代码,并逐段解析:

import numpy as np
import cv2
import glob
import matplotlib.pyplot as plt

# 1. 定义棋盘格的尺寸(内角点数量,例如9x6表示有9列,6行内角点)
CHECKERBOARD = (9, 6) # 请根据你打印的棋盘格调整
# 定义每个方格的实际物理尺寸(单位:毫米,需与你测量的尺寸一致)
square_size = 25.0

# 2. 为对象点准备世界坐标系坐标
# 格式为:(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0)
objp = np.zeros((CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)
objp *= square_size  # 乘以实际尺寸

# 3. 初始化数组来存储所有图像的对象点和图像点
objpoints = []  # 真实3D点
imgpoints = []  # 图像中的2D点

# 获取所有标定图像的路径
images = glob.glob('./calibration_images/*.jpg')

if len(images) == 0:
    print("未找到标定图像!请检查路径。")
    exit()

# 4. 遍历所有图像,查找角点
for i, fname in enumerate(images):
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 查找棋盘格角点
    ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD,
                                             cv2.CALIB_CB_ADAPTIVE_THRESH +
                                             cv2.CALIB_CB_FAST_CHECK +
                                             cv2.CALIB_CB_NORMALIZE_IMAGE)

    # 如果找到,添加对象点和细化后的图像点
    if ret:
        objpoints.append(objp)
        # 亚像素级角点检测
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
        corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
        imgpoints.append(corners2)

        # 可视化角点(可选)
        img_draw = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2, ret)
        cv2.imshow('Found Corners', img_draw)
        cv2.waitKey(500)  # 显示500毫秒
    else:
        print(f"未在图像 {fname} 中找到角点,已跳过。")

cv2.destroyAllWindows()

print(f"成功处理了 {len(objpoints)} 张图像用于标定。")
if len(objpoints) < 10:
    print("警告:用于标定的有效图像较少,可能影响标定精度。")

接下来是关键的标定计算部分:

# 5. 执行摄像头标定
ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(
    objpoints, imgpoints, gray.shape[::-1], None, None)

print("\n=== 标定结果 ===")
print(f"标定是否成功: {ret}")
print(f"\n内参矩阵 (Camera Matrix):")
print(camera_matrix)
print(f"\n畸变系数 (Distortion Coefficients):")
print(dist_coeffs.ravel())  # 通常为5个参数 [k1, k2, p1, p2, k3]

# 6. 计算重投影误差以评估标定质量
mean_error = 0
for i in range(len(objpoints)):
    imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i],
                                       camera_matrix, dist_coeffs)
    error = cv2.norm(imgpoints[i], imgpoints2, cv2.NORM_L2) / len(imgpoints2)
    mean_error += error

print(f"\n平均重投影误差: {mean_error / len(objpoints):.6f} 像素")
print("注意:重投影误差通常应小于0.5像素,值越小表示标定越精确。")

这段代码运行后,你将得到两个最重要的输出:内参矩阵和畸变系数。内参矩阵包含了焦距(fx, fy)和光学中心(cx, cy)信息,而畸变系数则描述了镜头引入的几何畸变。

4. 结果分析与应用:验证你的标定成果

拿到标定参数后,我们绝不能直接投入使用。必须进行验证和可视化,确保这些参数是可靠且有效的。

首先,保存你的标定参数。 这是宝贵的成果,应该持久化存储,供后续程序使用。

import yaml  # 需要安装PyYAML: pip install pyyaml

# 将标定参数保存到YAML文件
calibration_data = {
    'camera_matrix': camera_matrix.tolist(),
    'dist_coeffs': dist_coeffs.tolist(),
    'reprojection_error': float(mean_error / len(objpoints))
}

with open('camera_calibration.yaml', 'w') as f:
    yaml.dump(calibration_data, f, default_flow_style=False)
print("标定参数已保存至 'camera_calibration.yaml'")

其次,进行畸变矫正可视化。 这是最直观的验证方式。选择一张采集的原始图像,应用我们刚得到的畸变系数进行矫正,对比矫正前后的效果。

# 加载一张测试图像
img_test = cv2.imread(images[0])
h, w = img_test.shape[:2]

# 优化内参矩阵和获取ROI(可选)
new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(
    camera_matrix, dist_coeffs, (w, h), 1, (w, h))

# 方法1:使用undistort函数矫正
dst = cv2.undistort(img_test, camera_matrix, dist_coeffs, None, new_camera_matrix)

# 裁剪图像(根据ROI)
x, y, w_roi, h_roi = roi
dst_cropped = dst[y:y+h_roi, x:x+w_roi]

# 并排显示
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
axes[0].imshow(cv2.cvtColor(img_test, cv2.COLOR_BGR2RGB))
axes[0].set_title('原始图像 (含畸变)')
axes[0].axis('off')

axes[1].imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))
axes[1].set_title('矫正后图像')
axes[1].axis('off')
plt.show()

# 也可以保存矫正后的图像
cv2.imwrite('undistorted_output.jpg', dst)
print("畸变矫正完成,图像已保存。")

你应该能明显看到,原始图像中可能存在的弯曲直线(尤其是边缘部分)在矫正后变得笔直。这是畸变矫正起作用的最直接证据。

最后,理解内参矩阵的含义并尝试简单应用。 内参矩阵K通常如下所示:

[[fx, 0,  cx],
 [0,  fy, cy],
 [0,  0,  1]]
参数物理意义说明
fx, fy焦距(像素单位)反映了摄像头在x和y方向的放大能力。如果fx和fy值接近且较大,说明是长焦;如果值较小且可能不相等,可能是广角或存在像素非正方形的情况。
cx, cy主点坐标(像素)理论上应是图像的中心 (w/2, h/2)。实际值与之的偏差反映了传感器安装的微小偏移。

一个简单的应用是测量。在已知某个物体真实世界尺寸和其在图像中像素位置的情况下,利用内参和相机高度等外参,可以进行距离估算。虽然单目测距精度有限且需要其他假设,但作为理解内参作用的练习很有价值。

5. 进阶技巧与避坑指南

走完一遍完整流程后,你可能已经成功了,也可能遇到了一些问题。下面是一些实战中积累的经验和常见问题的解决方案。

提升标定精度的技巧:

  • 更多样化的姿态:确保标定板在三维空间中有足够的倾斜和旋转,而不仅仅是平移。OpenCV的算法需要这些信息来解算所有参数。
  • 更高的角点检测成功率:如果findChessboardCorners经常失败,可以尝试调整函数参数,或者检查棋盘格打印质量、光照是否均匀。有时稍微模糊的图像反而有助于角点检测。
  • 手动验证角点:对于自动检测失败的图像,OpenCV提供了findChessboardCornersSB(基于分水岭算法,OpenCV 4.5.1+)或手动标注角点的可能性,虽然繁琐但能挽救关键数据。

常见问题与排查:

  • 重投影误差过大(>1像素):
    • 检查对象点尺寸:确认square_size是否与打印的棋盘格实际物理尺寸一致(单位很重要)。
    • 检查角点顺序:findChessboardCorners检测到的角点顺序必须与objp中定义的世界坐标点顺序一致。通常默认是没问题的,但如果棋盘格旋转了180度,可能需要调整。
    • 剔除坏样本:计算每张图像单独的重投影误差,误差特别大的那张图像可能是模糊的或角点检测不准,将其从objpoints和imgpoints中移除,重新标定。
  • 畸变系数数值异常巨大:例如k1, k2的绝对值远大于1。这通常意味着标定板姿态不够多样,或者图像数量太少,算法陷入了局部最优解。增加图像数量并确保姿态多样化是唯一途径。
  • 矫正后的图像边缘出现严重黑边或扭曲:这是正常的。getOptimalNewCameraMatrix函数中的alpha参数可以控制如何裁剪这些无效区域。alpha=0会裁剪掉所有黑边,得到最大有效区域;alpha=1会保留所有原始像素(包含黑边),你可以根据应用需求调整。

标定参数的长期维护: 摄像头内参并非一成不变。强烈的震动、温度变化或镜头焦距调整(如果是变焦镜头)都可能改变内参。对于自动驾驶这类高可靠性要求的系统,需要建立定期标定的机制。一种实用的方法是,在系统中内置一个简单的标定检查流程,例如通过检测已知尺寸的物体来计算重投影误差,当误差超过阈值时触发重新标定提醒。

整个流程走下来,你会发现摄像头标定更像是一门实践艺术,而非纯理论科学。理论提供了框架和公式,但最终精度掌握在那些精心准备标定板、耐心采集数据、并认真分析结果的人手中。我自己的经验是,第一次标定的结果往往不理想,但通过反复调整采集策略、剔除坏数据,误差可以从最初的2个多像素降到0.3个像素以下,这种提升在后续的视觉测距任务中带来的精度改善是实实在在的。不要害怕失败,每一次失败的标定都能让你对摄像头这个“黑盒”有更深的理解。

OpenCV 标定摄像头(Python 版本代码,视频中标定,亲测可用) 在机器视觉领域,摄像头的标定指通过技术手段拿到相机的内参、外参及畸变参数。 相机内参长这样,利用针孔模型,将 3d 物体透视投影到 2d 的相机屏幕上。 P=[fx0cx0fycy001] P = \begin{bmatrix} f_{x} &amp;amp; 0 &amp;amp; c_{x} \\ 0 &amp;amp; f_{y} &amp;amp; c_{y}\\ 0 &amp;amp... 阅读详情

相关推荐

新手必看:如何用Python+OpenCV实现双目相机标定(附完整代码)

本文为计算机视觉新手提供了使用Python和OpenCV实现双目相机标定的完整实战指南。内容涵盖从环境搭建、标定板准备、核心原理讲解到分步代码实现,详细说明了如何通过采集图像、计算内外参数及立体校正,最终完成双目测距与深度图生成,为机器人导航、三维重建等应用奠定基础。

yhn4567890的博客 1163

python+OpenCV 相机标定

相机标定 目录 原理 相机标定结果 流程简介 实验过程 总结 代码及调试问题 相机标定在机器人视觉和畸变校正上都是很关键的一部分,接下来用张正友相机标定法标定我的手机(Vivo xpaly5A)后置摄像头。 原理 首先先简单的了解一下相机标定的原理。 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程。 一般来说,标...

吃鱼的博客 2万+

OpenCV 相机标定 (Python版)

迈德威视相机调用( 基于 Windows 系统 + VS2017 + OpenCV 3.x.x )前言一、登录迈德威视官网,下载官方SDK二、代码调用与视频帧处理( 基于 VS2017 、C++ 及 OpenCV 3.X.X )1.找到官方示例程序2.配置好环境( 本示例配置IDE为 VS2017 ,其他VS版本亦同 )总结 前言     此博客记录了迈德威视工业相机在 Windows 系统下的代码调用及其环境配置,基于 VS2017 、C++,通过 OpenCV 3.x.x 对视频帧进行处理。   .

kkkkkk0729的博客 5384

【摄像头标定】使用opencv进行双目摄像头的标定及矫正(python)

要进行标定首先需要双目拍的棋盘格图片,20张左右,由于本文的双目摄像头嵌入在开发板底板中,并且使用的是ros进行开发,所以对于大部分人拍照这里是没有参考价值的,对于也是使用ros开发的小伙伴,需要写一个节点发布双目摄像头的图像数据,然后再写一个节点订阅双目摄像头数据进行拍照保存。本文重点也不在拍照,对于其他小伙伴可以直接搜索一些适用的拍照方法,只要能获得到图片即可。分别是左相机的内参矩阵、畸变系数,右相机的内参矩阵和畸变系数,两个相机之间的旋转矩阵、平移矩阵、本质矩阵、基本矩阵。

海风的博客 5940

OpenCV+Python实战:用棋盘格搞定双目摄像头标定(附完整代码)

本文详细介绍了使用OpenCV和Python进行双目摄像头标定的完整实战流程。通过棋盘格标定板,系统讲解了从图像采集、角点检测、单目标定到双目标定的核心步骤,并提供了完整的代码实现。重点解析了如何获取摄像头内参、畸变系数以及双目系统间的旋转矩阵与平移向量,确保立体视觉应用如三维重建和深度估计的精度。

tgb34567890的博客 757

opencv calibration_(五)单目摄像头标定与畸变矫正(C++,opencv)

本文将梳理一种单目摄像头标定和矫正的方法,在梳理的过程中,首先使用网上离线的图片数据跑通流程,然后接入自己的camera,手动采集标定图像,实时矫正相机的畸变,然后输出矫正后的图像。全文基于Opencv使用C++实现,文末附带相应的python代码。1. 基本概念1.1 什么是畸变下面两张示意图可以让大家直观的感受摄像头的畸变效果,简单的讲摄像头的畸变会让人们看到的图像出现“拉伸”或“扭曲”的直...

weixin_39919948的博客 2137

【摄像头标定】单目摄像头标定及矫正-opencv(python)

由于我的摄像头是嵌入于开发板底板中,并且摄像头数据通过ros话题发布,所以拍照方式比较不一样,使用ros作为工具,编写节点代码进行拍照,不了解ros的可以自己搜索一下如何对连接到开发板上的usb摄像头拍照,一般开发板连接USB摄像头的话,可以直接通过opencv的videocapture打开摄像头获取数据,比较方便的拍照。其中camera_matrix为相机的内参矩阵,dist_coeff_left为畸变系数,接下来就可以使用这两个参数对图像进行矫正。明显看出畸变减小,可以注意看头顶的线条。

海风的博客 2924

保姆级教程:用OpenCV+Python搞定双目摄像头标定(附完整代码)

本文提供了一份详尽的OpenCV+Python双目摄像头标定实战教程。从硬件准备、棋盘格制作、自动化图像采集,到单目与双目标定的核心原理与代码实现,手把手教你完成标定全过程,并附有完整的Python代码示例。掌握双目摄像头标定是进行三维视觉、机器人导航和立体测距等应用的关键基础。

weixin_29088655的博客 817

相机内参矩阵实战:从零开始手把手标定你的摄像头(附Python代码)

本文详细介绍了相机内参矩阵的实战标定方法,从硬件准备到OpenCV代码实现,手把手教你如何准确标定摄像头。通过棋盘格标定板和Python代码示例,解析内参矩阵的核心参数及其在三维重建中的应用,帮助开发者避免常见错误,提升计算机视觉项目的精度。

aa123的博客 1047

自动驾驶入门:如何用Python+OpenCV实现摄像头内参标定(附完整代码)

本文详细介绍了使用Python和OpenCV实现摄像头内参标定的完整流程,涵盖从棋盘格采集到参数优化的各个环节。通过实战代码演示,帮助开发者掌握自动驾驶系统中关键的摄像头标定技术,确保环境感知的准确性。文章特别强调了标定过程中的常见问题解决方案和工程化应用建议。

weixin_30772105的博客 47

python opencv 摄像头标定_(五)单目摄像头标定与畸变矫正(C++,opencv)

本文将梳理一种单目摄像头标定和矫正的方法,在梳理的过程中,首先使用网上离线的图片数据跑通流程,然后接入自己的camera,手动采集标定图像,实时矫正相机的畸变,然后输出矫正后的图像。全文基于Opencv使用C++实现,文末附带相应的python代码。1. 基本概念1.1 什么是畸变下面两张示意图可以让大家直观的感受摄像头的畸变效果,简单的讲摄像头的畸变会让人们看到的图像出现“拉伸”或“扭曲”的直...

weixin_39980298的博客 930

opencv-python摄像机内外参数标定练习

使用python语言中的numpy和opencv库,通过棋盘格拍摄(张正友标定法)实现摄像机内外参数标定的练习

weixin_47718413的博客 2264

OpenCV双目测距实战:从标定到三维重建的完整流程(附Python代码)

本文详细介绍了使用OpenCV实现双目测距的完整流程,从相机标定到三维重建,涵盖硬件配置、标定方法、立体匹配算法选择及深度计算优化。通过Python代码示例,帮助开发者快速掌握双目相机测距技术,适用于机器人导航、自动驾驶等场景。

happy2的博客 948

python 摄像头标定_生成黑白棋盘标定图和单目相机标定(python+opencv实现)

学习记录。事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下。相机成像相机的成像原理——小孔成像然而,在实际由于设计工艺问题、相机安装环境或物体摆放位置等影响,会照成成像与实际图像不一样的现象。由于设计工艺照成的影响是无法改变的事实,所以这将是相机的内参;由环境或安装方式照成的影响是可以改变的,这就是相机的外参。在https://blog.c...

weixin_39804335的博客 1006

OpenCV开发笔记(八十一):通过棋盘格使用鱼眼方式标定相机内参矩阵矫正摄像头图像

对于广角谁想投通过相机图片可以识别出棋盘角点计算相机内参矩阵,通过畸变校准可以得到较好的效果,但是鱼眼摄像头通过这种方式获得周围四周的图像效果并不是很好。所以,鱼眼摄像头在校准上与普通摄像头有一些区别。本篇通过一张图片来识别计算得到相机内参矩阵,并鱼眼矫正的方式矫正图像畸形。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 1万+

如何在TRAE(国际版)中搭建ESP-IDF环境以及怎么使用ESP-IDF插件编译烧录到ESP32s3中

点击进入,再点击ESPRESSIF中的EXPRESS,这里会下载ESP-IDF所需要的全部工具和包等等。首先我们从终端中进入项目所在的目录中,我的项目在E盘下的jikecode\esp32s3-client中,我就进入这个目录下。,因为我的项目是针对ESP32-S3进行开发的,所以这里的芯片型号是esp32s3,大家根据各自芯片的型号来输入。执行了这个命令后,ESP-IDF会自动配置与ESP-S3相关的编译选项,生成对应芯片的配置文件。进入第一个ESP-IDF插件,进行安装,注意安装的是。

一个爱折腾技术的普通人,分享踩过的坑、学到的干货。 1502

OpenCV实战:单目摄像头标定全流程解析(附Python/C++代码)

本文提供了单目摄像头标定的完整实战指南,详细解析了从准备标定板、采集高质量数据到使用OpenCV进行标定的全流程。通过Python和C++双版本代码示例,手把手教你如何获取精确的相机内参和畸变系数,并评估标定结果,为后续的3D视觉、SLAM等应用奠定坚实基础。

bb456的博客 422

生物信息学避坑指南:Scissor算法参数alpha和cutoff的黄金设置法则

本文深入解析了生物信息学中Scissor算法的关键参数alpha和cutoff的黄金设置法则,帮助研究者有效整合bulk RNA与单细胞数据,识别单细胞亚群。通过实战验证的调参策略,避开常见陷阱,获得可靠的生物学发现,特别适用于肿瘤异质性研究和免疫细胞分型等场景。

weixin_33734785的博客 450

OpenCV相机标定实战:5分钟搞定内参外参矩阵(附Python代码)

本文详细介绍了使用OpenCV进行相机标定的实战步骤,帮助开发者在5分钟内获取精确的内参和外参矩阵。通过棋盘格准备、角点检测优化、核心代码解析及验证方法,提升计算机视觉项目的测量精度。附Python代码示例,适合快速实现工业级标定需求。

weixin_30566063的博客 377

SRC漏洞挖掘实战:从攻击面管理到业务逻辑漏洞的精准狩猎

在网络安全领域,漏洞挖掘是识别和利用软件系统中安全弱点的核心实践。其基本原理在于通过系统化的方法,识别和评估一个应用或系统的攻击面,并从中定位安全防护的薄弱环节。这项技术的价值在于能够主动发现潜在风险,防患于未然,对于保障企业数字资产安全至关重要。典型的应用场景包括对Web应用、移动端API以及各类在线业务系统的安全性评估。在实际的漏洞挖掘,尤其是针对安全应急响应中心(SRC)的实战中,高效的策略往往聚焦于**边缘资产**的发现与利用,以及对**业务逻辑漏洞**的模式化测试。掌握这些经过验证的思路,能帮助安

babing2770的博客 413

组合导航-IMU-GPS-RTK基本介绍

在实际应用中,需要利用 GPS、北斗等方式产生的信号进行初始化,结合惯导信号和卫星导航信号进行进行卡尔曼滤波处理,得出其最佳推算的定位信息。惯导比起卫星定位具有自身的技术优势,测量方法不依赖外界,短期精度高,能稳 定高频地输出信号。工作原理是通过感知物体在空间的角速度、线速度,进而获取物体的姿态、位置和速度等信息,实现对运动物体姿态和运动轨迹的测量,可以实现全天候全地点地工作。但惯导也有自身的缺陷,由于采用积分算法,定位误差随 载体运行不断累积。

NCU_wander的博客 8012
上一篇: RS232串口硬件调试实战:从波形抓取到故障定位
下一篇: 从零到一:在RDK X5上部署自定义YOLOv5模型的避坑指南
Light
博客等级 码龄27年 39粉丝 1340原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值