OpenCV的 ccalib 模塊用于自定義標定板的檢測和處理類cv::ccalib::CustomPattern()----函數calibrate

  • 操作系統:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 編程語言:C++11

算法描述

cv::ccalib::CustomPattern 是OpenCV的 ccalib 模塊中的一個類,主要用于自定義標定板的檢測和處理。這個模塊提供了比傳統的 calib3d 模塊更高級的相機標定功能。

函數calibrate是 cv::ccalib::CustomPattern 類中的一個靜態方法,用于基于自定義標定圖案進行相機標定。它的作用與 OpenCV 中經典的 cv::calibrateCamera() 非常相似,但針對的是使用自定義標定板的情況。

該函數的作用是根據多個視角下檢測到的 世界坐標系點(objectPoints) 和 圖像坐標系點(imagePoints) 來計算相機的內參矩陣和畸變系數,并可選地返回每幀圖像對應的旋轉向量和位移向量。

它是一個封裝了標定流程的方法,適用于那些通過 CustomPattern 檢測得到角點或特征點的場景。

函數原型

double cv::ccalib::CustomPattern::calibrate
(InputArrayOfArrays objectPoints,InputArrayOfArrays imagePoints,Size imageSize,InputOutputArray cameraMatrix,InputOutputArray distCoeffs,OutputArrayOfArrays rvecs,OutputArrayOfArrays tvecs,int flags = 0,TermCriteria criteria = TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 30, DBL_EPSILON)
)

參數

參數名類型描述
objectPointsInputArrayOfArrays各視圖中 3D 空間點集合,通常為 std::vector<std::vectorcv::Point3f> 類型。每個子 vector 表示一張圖的世界坐標點。
imagePointsInputArrayOfArrays各視圖中對應的 2D 圖像點集合,通常為 std::vector<std::vectorcv::Point2f> 類型。每個子 vector 是檢測到的圖像上的角點。
imageSizeSize圖像尺寸,如 Size(640, 480),用于初始化內參矩陣等。
cameraMatrixInputOutputArray輸出/輸入的相機內參矩陣(3x3),可以傳入已知值作為初始估計。
distCoeffsInputOutputArray輸出/輸入的畸變系數(1x5 或 1x8),格式為 (k1, k2, p1, p2, [k3, [k4, k5, k6]])。
rvecsOutputArrayOfArrays輸出每個視圖的旋轉向量(可為 std::vectorcv::Mat 或 std::vectorcv::Vec3d>)。
tvecsOutputArrayOfArrays輸出每個視圖的平移向量(同上)。
flagsint標志位,控制標定行為。常用選項如下:
- CALIB_USE_INTRINSIC_GUESS: 使用提供的內參初始值
- CALIB_FIX_PRINCIPAL_POINT: 固定主點不優化
- CALIB_ZERO_TANGENT_DIST: 不優化切向畸變
- CALIB_FIX_K1~K6: 固定某些徑向畸變系數
criteriaTermCriteria迭代優化終止條件,默認為最多迭代30次或精度達到浮點誤差級別。

代碼示例

#include <opencv2/ccalib.hpp>
#include <opencv2/opencv.hpp>int main()
{// 假設我們已經用 CustomPattern 檢測到了多組 objectPoints 和 imagePointsstd::vector< std::vector< cv::Point3f > > objectPoints;std::vector< std::vector< cv::Point2f > > imagePoints;// 示例數據(實際應由 detectPattern 得到)for ( int i = 0; i < 10; ++i ){std::vector< cv::Point3f > obj;std::vector< cv::Point2f > img;// 填充一些世界坐標和圖像坐標for ( int x = 0; x < 5; ++x )for ( int y = 0; y < 5; ++y )obj.push_back( cv::Point3f( x * 10, y * 10, 0 ) );// 假設圖像點是隨機生成的for ( int j = 0; j < 25; ++j )img.push_back( cv::Point2f( rand() % 640, rand() % 480 ) );objectPoints.push_back( obj );imagePoints.push_back( img );}cv::Mat cameraMatrix = cv::Mat::eye( 3, 3, CV_64F );    // 初始化內參cv::Mat distCoeffs   = cv::Mat::zeros( 8, 1, CV_64F );  // 畸變系數std::vector< cv::Mat > rvecs, tvecs;cv::ccalib::CustomPattern pattern;double error =pattern.calibrate( objectPoints, imagePoints, cv::Size( 640, 480 ), cameraMatrix, distCoeffs, rvecs, tvecs, 0, cv::TermCriteria( cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 30, 1e-6 ) );std::cout << "Reprojection Error: " << error << std::endl;std::cout << "Camera Matrix:\n" << cameraMatrix << std::endl;std::cout << "Distortion Coefficients:\n" << distCoeffs << std::endl;return 0;
}

運行結果

Reprojection Error: 243.176
Camera Matrix:
[145.5314351146498, 0, 319.4999999809153;0, 111.8716131818644, 239.5000000023377;0, 0, 1]
Distortion Coefficients:
[-0.02024007664987641;5.558029159131296e-05;0.0006431802159707427;-0.0009573062145439125;-3.54839696095315e-08]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904729.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904729.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904729.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【從零開始學習RabbitMQ | 第一篇】從異步通信到交換機

目錄 前言 1.什么是RabbitMQ&#xff1f; 2.同步調用的優缺點 3.異步調用的優缺點 3.1優點&#xff1a; 3.2異步調用的問題是什么&#xff1f; 4技術選型 4.1AMQP協議就是&#xff1a; 4.2kafka和RabbitMQ的使用場景 5.安裝RabitMq 6.rabitmq的整體架構 7.RabibtM…

Dify MCP實戰 - 郵件發送

安裝MCP sse插件 配置MCP Server 由于Dify 目前還沒有支持stdio方式連接MCP Server。我們找到了Zapier&#xff0c;輕松調用 7000 App 工具。 Zapier配置 ? 訪問 https://actions.zapier.com/settings/mcp/ ? 添加Gmail Send Email工具 ? 授權自己的Gmail郵箱 ? 復制Za…

uniapp 微信小程序使用圖表

使用的是秋云 ucharts 直接在hbuilder插件市場進行下載導入項目中&#xff0c;多端支持 下載地址秋云 ucharts echarts 高性能跨全端圖表組件 - DCloud 插件市場 導入成功后這里就能看到導入的插件啦 導入項目后就可以直接在頁面中通過組件使用了 不需要其余配置 使用簡單 參…

Python數據脫敏技術在大模型機器學習中的深度應用與實踐

一、數據脫敏技術體系詳解 1.1 結構化數據脫敏技術 1.1.1 列級脫敏策略 import pandas as pd from faker import Fakerclass StructuredDataMasker:def __init__(self):self.faker =

【設計模式】GoF設計模式之策略模式(Strategy Pattern)

設計模式之策略模式 Strategy Pattern V1.0核心概念角色代碼示例程序運行結果代碼講解 適用范圍 V1.0 核心概念 策略模式是一種行為型設計模式&#xff0c;其核心思想是業務類執行某個動作時&#xff0c;可以使用該動作的不同的實現&#xff0c;并在程序運行中可以切換使用該…

VS Code配置指南:打造高效的QMK開發環境

VS Code配置指南&#xff1a;打造高效的QMK開發環境 前言 你是否曾為QMK固件開發環境的搭建而頭疼不已&#xff1f;本文將手把手教你使用Visual Studio Code&#xff08;簡稱VS Code&#xff09;這款強大的代碼編輯器來構建一個完美的QMK開發環境&#xff0c;讓你的鍵盤固件開…

java CompletableFuture 異步編程工具用法1

1、測試異步調用&#xff1a; static void testCompletableFuture1() throws ExecutionException, InterruptedException {// 1、無返回值的異步任務。異步線程執行RunnableCompletableFuture.runAsync(() -> System.out.println("only you"));// 2、有返回值的異…

中國自動駕駛研發解決方案,第一!

4月28日&#xff0c;IDC《中國汽車云市場(2024下半年)跟蹤》報告發布&#xff0c;2024下半年中國汽車云市場整體規模達到65.1億元人民幣&#xff0c;同比增長27.4%。IDC認為&#xff0c;自動駕駛技術深化與生成式AI的發展將為汽車云打開新的成長天花板&#xff0c;推動云計算在…

如何快速獲取字符串的UTF-8或UTF-16編碼二進制數據?數值轉換成字符串itoa不是C標準?其它類型轉換成字符串?其它類型轉換成數值類型?

目錄 如何快速獲取字符串的UTF-8或UTF-16編碼二進制數據? 數值轉換成字符串itoa不是C標準&#xff1f; 其它類型轉換成字符串 其它類型轉換成數值類型 轉換成數值的API 為什么有的編程語言允許字符串和整數相加? 字符串拼接 字符串字面量自動連接 如何快速獲取字符串…

Android SDK 國內鏡像及配置方法(2025最新,包好使!)

2025最新android sdk下載配置 1、首先你需要有android sdk manager2、 直接上教程修改hosts文件配置域名映射即可(不用FQ)2.1 獲取ping dl.google.com域名ip地址2.2 配置hosts文件域名映射2.3 可以隨意下載你需要的sdk3、 總結:走過彎路,踩過坑!!!大家就不要踩了!避坑1…

MySQL事務隔離機制與并發控制策略

MySQL事務隔離機制與并發控制策略 MySQL事務隔離機制與并發控制策略一、數據庫并發問題全景解析二、事務隔離級別深度解析三、MySQL并發控制核心技術1. 多版本并發控制&#xff08;MVCC&#xff09;2. 鎖機制 四、隔離級別實現差異對比五、生產環境最佳實踐六、高級優化技巧七、…

Python `zip()` 函數是什么

Python zip() 函數是什么 在 Python 里,zip() 是一個內置函數,其主要作用是將多個可迭代對象(像列表、元組、字符串等)中的元素一一對應地組合成元組,最終返回一個迭代器,這個迭代器會生成這些元組。 基本語法 zip(*iterables)其中,*iterables 代表可變數量的可迭代對…

Jenkins 改完端口號啟動不起來了

讓我們將 Jenkins 恢復到默認的 8080 端口&#xff0c;確保它能正常啟動&#xff1a; 1. 修改 Jenkins 的配置文件&#xff1a; sudo nano /etc/default/jenkins 將內容修改為&#xff1a; HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…

【AWS+Wordpress-準備階段】AWS注冊+創建EC2實例

前言 自學筆記&#xff0c;解決問題為主&#xff0c;親測有效&#xff0c;歡迎補充。 本地WP文件部署到AWS整體步驟如下&#xff1a;&#xff08;本文重點&#xff1a;AWS準備完成&#xff09; 0. [AWS 準備] 注冊 AWS 并創建 EC2 實例 ↓ 1. [生成安裝包&#xff1a;用 Du…

使用pytorch保存和加載預訓練的模型方法

需要使用到的函數 在 PyTorch 中&#xff0c;torch.save() 和 torch.load() 是用于保存和加載模型的核心函數。 torch.save() 函數 主要用途&#xff1a;將模型或模型的狀態字典&#xff08;state_dict&#xff09;保存到文件中。 語法&#xff1a; torch.save(obj, f, pi…

Python從入門到高手8.3節-元組的常用操作方法

目錄 11.3.1 元組的常用操作方法 11.3.2 元組的查找 11.3.3 祈禱明天不再打雷下雨 11.3.1 元組的常用操作方法 元組類型是一種抽象數據類型&#xff0c;抽象數據類型定義了數據類型的操作方法&#xff0c;在本節的內容中&#xff0c;著重介紹元組類型的操作方法。 ? 元組是…

圖書推薦(協同過濾)算法的實現:基于訂單購買實現相似用戶的圖書推薦

代碼部分 package com.ruoyi.system.service.impl;import com.ruoyi.system.domain.Book; import com.ruoyi.system.domain.MyOrder; import com.ruoyi.system.mapper.BookMapper; import com.ruoyi.system.mapper.MyOrderMapper; import com.ruoyi.system.service.IBookRecom…

JMeter快速指南:命令行生成HTML測試報告(附樣例命令解析)

一、核心命令解析 jmeter -g Dash_CapacityTest_01_AllModules_1000.jtl -o report/ 參數 作用 示例文件說明 -g 指定.jtl結果文件路徑 -o 指定報告輸出目錄 自動創建report文件夾 二、操作步驟&#xff08;Windows/Linux/Mac通用&#xff09; 進入JMe…

2025年滲透測試面試題總結-滲透崗位全職工作面試(附回答)(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 一、通用基礎類問題 1. 自我介紹 2. 職業動機與規劃 3. 加班/出差接受度 二、安全技術類問題 1. 漏…

使用DEEPSEEK快速修改QT創建的GUI

QT的GUI&#xff0c;本質上是使用XML進行描述的&#xff0c;在QT CREATOR的界面編輯處&#xff0c;按CTRL2 切換到代碼視圖&#xff0c;CTRL3切換到編輯器視圖。 CTRL2 切換到代碼視圖 CTRL3 切換到編輯器視圖 鼠標左鍵點擊代碼視圖中&#xff0c;按CTRLA → CTRLC復制XML代碼…