用OpenCV標定相機內參應用示例(C++和Python)

下面是一個完整的 使用 OpenCV 進行相機內參標定(Camera Calibration) 的示例,包括 C++ 和 Python 兩個版本,基于棋盤格圖案標定。


一、目標:相機標定

通過拍攝多張帶有棋盤格圖案的圖像,估計相機的內參:

  • 相機矩陣(內參) K
  • 畸變系數 distCoeffs
  • 可選外參(R, T)
  • 標定精度指標(如重投影誤差)

二、棋盤格參數設置(根據自己的棋盤格設置):

  • 棋盤格角點數:9 x 6(內角點,9列×6行);
  • 每個格子實際尺寸為:25.0 mm(自定義);
  • 圖像列表已存為多張 JPG /或者其他格式圖片。

三、Python 示例(

import cv2
import numpy as np
import glob# 設置棋盤格參數
chessboard_size = (9, 6)
square_size = 25.0  # mm# 生成世界坐標系下的 3D 點
objp = np.zeros((np.prod(chessboard_size), 3), np.float32)
objp[:, :2] = np.indices(chessboard_size).T.reshape(-1, 2)
objp *= square_size# 儲存所有圖像的角點
objpoints = []  # 3D points
imgpoints = []  # 2D points# 讀取圖片
images = glob.glob("calib_images/*.jpg")for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 檢測角點ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)if ret:objpoints.append(objp)corners2 = cv2.cornerSubPix(gray, corners, (11,11), (-1,-1),criteria=(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))imgpoints.append(corners2)# 可視化角點cv2.drawChessboardCorners(img, chessboard_size, corners2, ret)cv2.imshow('img', img)cv2.waitKey(100)cv2.destroyAllWindows()# 標定相機
ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)print("相機內參矩陣 K:\n", K)
print("畸變系數 dist:\n", dist)
print("重投影誤差:", ret)

四、C++ 示例

#include <opencv2/opencv.hpp>
#include <vector>
#include <iostream>
#include <filesystem>using namespace cv;
using namespace std;int main() {Size boardSize(9, 6);float squareSize = 25.0f;vector<vector<Point3f>> objectPoints;vector<vector<Point2f>> imagePoints;vector<Point3f> objp;for (int i = 0; i < boardSize.height; ++i)for (int j = 0; j < boardSize.width; ++j)objp.emplace_back(j * squareSize, i * squareSize, 0);vector<String> imageFiles;glob("calib_images/*.jpg", imageFiles);for (const auto& fname : imageFiles) {Mat img = imread(fname);Mat gray;cvtColor(img, gray, COLOR_BGR2GRAY);vector<Point2f> corners;bool found = findChessboardCorners(gray, boardSize, corners);if (found) {cornerSubPix(gray, corners, Size(11,11), Size(-1,-1),TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 30, 0.001));imagePoints.push_back(corners);objectPoints.push_back(objp);drawChessboardCorners(img, boardSize, corners, found);imshow("Corners", img);waitKey(100);}}destroyAllWindows();Mat K, distCoeffs;vector<Mat> rvecs, tvecs;calibrateCamera(objectPoints, imagePoints, Size(640, 480),K, distCoeffs, rvecs, tvecs);cout << "Camera Matrix K:\n" << K << endl;cout << "Distortion Coefficients:\n" << distCoeffs << endl;
}

五、輸出參數解釋

參數含義
K / cameraMatrix相機內參矩陣 (fx, fy, cx, cy)
distCoeffs畸變參數 [k1, k2, p1, p2, k3]
rvecs每張圖像的旋轉向量
tvecs每張圖像的平移向量
ret平均重投影誤差(數值越小越好)

六、應用建議

  • 拍攝圖像時應盡量覆蓋各個角度、不同距離;
  • 建議圖像 >10 張以上;
  • 標定結果可用于 cv::undistortcv::initUndistortRectifyMap 做圖像矯正;
  • 也可以用 fisheye 模型標定 (cv::fisheye::calibrate),適用于廣角相機。

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

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

相關文章

(二)OpenCV——邊緣增強與檢測

邊緣增強與檢測是圖像處理中的核心技術&#xff0c;其核心目標是突出圖像中的不連續區域&#xff08;邊緣&#xff09;&#xff0c;為后續的圖像分析提供基礎。一、基本概念邊緣本質上是圖像中灰度/顏色發生突變的區域&#xff0c;對應著&#xff1a;物體邊界表面方向改變材質變…

018 進程控制 —— 進程等待

&#x1f984; 個人主頁: 小米里的大麥-CSDN博客 &#x1f38f; 所屬專欄: Linux_小米里的大麥的博客-CSDN博客 &#x1f381; GitHub主頁: 小米里的大麥的 GitHub ?? 操作環境: Visual Studio 2022 文章目錄進程控制 —— 進程等待1. 進程等待必要性2. 常用等待方法&#xf…

PHP password_hash() 函數

password_hash() 函數用于創建密碼的散列&#xff08;hash&#xff09;PHP 版本要求: PHP 5 > 5.5.0, PHP 7語法string password_hash ( string $password , int $algo [, array $options ] )password_hash() 使用足夠強度的單向散列算法創建密碼的散列&#xff08;hash&…

理解Linux文件系統:從物理存儲到統一接口

目錄 一、狹義理解&#xff08;物理層面&#xff09; 二、廣義理解&#xff08;Linux系統視角&#xff09; 三、文件結構解析 四、系統實現機制 一、狹義理解&#xff08;物理層面&#xff09; 存儲特性&#xff1a;文件以二進制形式存儲在磁盤等永久性存儲介質中 介質特點…

前端接入海康威視攝像頭的三種方案

方案選擇?方案適用場景優缺點?Web SDK&#xff08;3.0&#xff09;??需要完整功能&#xff08;PTZ控制、錄像回放&#xff09;功能全&#xff0c;但需加載海康JS文件?RTSP轉Web播放?低延遲實時監控需后端轉碼&#xff08;如FFmpeg轉HLS&#xff09;?HTTP API?簡單截圖或…

openGL學習(Shader)

認識Shader在計算機圖形學中&#xff0c;Shader&#xff08;著色器&#xff09;是一種運行在 GPU&#xff08;圖形處理單元&#xff09;上的程序&#xff0c;用于控制圖形渲染過程中頂點和像素的處理。著色器是 OpenGL、Direct3D、Vulkan 等圖形 API 的核心組成部分&#xff0c…

webpack高級配置

一、了解webpack高級配置&#xff1a; 1、什么是webpack高級配置&#xff1a; 進行 Webpack 優化&#xff0c;讓代碼在編譯或者運行時性能更好 2、webpack優化從哪些方面入手&#xff1a; ① 提升開發體驗&#xff0c;增強開發和生產環境的代碼調試&#xff1a; 如果代碼編寫…

LLM表征工程還有哪些值得做的地方

LLM表征工程還有哪些值得做的地方 在大型語言模型(LLM)的表征工程領域,近年來涌現出多個具有突破性的創新方向,這些方法通過動態調整、多模態融合、結構化記憶增強等技術,顯著提升了模型的適應性、可解釋性和效率。 一、動態自適應表征:從靜態到動態的范式革新 傳統LL…

LabVIEW智能避障小車

?LabVIEW結合 NI、德州儀器&#xff08;TI&#xff09;、歐姆龍&#xff08;Omron&#xff09;等硬件&#xff0c;設計實現了一款具備智能避障、循跡功能的輪式機器人。系統支持手動操控與自主運行兩種模式&#xff0c;通過無線通信實時傳輸傳感器數據與圖像信息&#xff0c;在…

邏輯代數中的基本規則,代入規則和反演規則,對偶規則

本文探討了代入規則在邏輯等式中的應用&#xff0c;解釋了如何通過替換變量來保持等式的正確性&#xff0c;同時介紹了反演規則和對偶規則的概念。代入規則定義:在任何一個包含變量A的邏輯等式中&#xff0c;如果用另一個邏輯式代入式中的所有A位置&#xff0c;則等式依然成立反…

Javaweb使用websocket,請先連上demo好吧!很簡單的!

Javaweb使用websocket先看結構及效果MyWebSocketHandler用于處理消息WebSocketConfig用于配置建聯地址等SchedulerConfig必須配置這個MyWebSocketInterceptor建聯的攔截器SpringBootWebsocketApplication啟動類POM依賴展示效果源碼先看結構及效果 MyWebSocketHandler用于處理消…

文心大模型4.5開源測評:保姆級部署教程+多維度測試驗證

前言&#xff1a;國產大模型開源的破局時刻 2025年6月百度文心大模型4.5系列的開源&#xff0c;標志著國產AI從"技術跟跑"向"生態共建"的關鍵跨越。 文心大模型4.5是百度自主研發的新一代原生多模態基礎大模型&#xff0c;通過多個模態聯合建模實現協同優…

前端學習5:Float學習(僅簡單了解,引出flex)

一、Float基礎概念1. 設計初衷&#xff1a; float最初是為實現文字環繞圖片的效果&#xff08;類似雜志排版&#xff09;&#xff0c;后來被開發者用來做頁面布局。2. 核心特性&#xff1a;使元素脫離普通文檔流&#xff08;但仍在DOM中&#xff09;元素會向左/右浮動&#xff…

08-自然壁紙實戰教程-視頻列表-云

08-自然壁紙實戰教程-視頻列表 前言 視頻列表頁面本質上也是一個數據展示的列表&#xff0c;不同之處在于之前是是展示壁紙&#xff0c;Image組件負責渲染&#xff0c;這里展示的是視頻&#xff0c;使用Video組件&#xff0c;另外視頻頁面也實現了下載的基本功能&#xff0c;…

SCI特刊征稿

我們團隊聯合北京工業大學研究團隊在SCI源刊CMC組織了特刊SI: Advanced Edge Computing and Artificial Intelligence in Smart Environment,主要收錄邊緣計算和人工智能方向的文章&#xff0c;歡迎領域專家和學者投稿&#xff0c;網址https://www.techscience.com/cmc/special…

DO,VO,DTO.....

在 Java 項目里&#xff08;尤其是 Spring、MyBatis 這類框架&#xff09;&#xff0c;經常會看到一堆以 O 結尾的類&#xff1a;VO、DO、DTO、BO、POJO……它們本質上都是普通的 Java Bean&#xff08;即 POJO&#xff09;&#xff0c;但職責和出現的位置不同。下面用“用戶下…

數據結構之并查集和LRUCache

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

UE5多人MOBA+GAS 21、給升龍添加連段攻擊,從角色的按下事件中傳遞事件給GA

文章目錄給升龍制作可連段緩存下一連段用普攻鍵來觸發升龍后續的連段在角色中發送按下普攻標簽事件在升龍中接收按下事件&#xff0c;觸發連段以及傷害和力量的傳遞最后在藍圖中設置一下升龍技能的完整代碼給升龍制作可連段 給升龍技能添加一些連段 緩存下一連段 緩存下一連…

基于光柵傳感器+FPGA+ARM的測量控制解決方案

基于光柵傳感器結合FPGA與ARM的測量控制解決方案&#xff0c;通過硬件協同分工實現高精度、實時性及多場景適應性&#xff1a;?? ?一、系統架構分工??傳感層&#xff08;光柵傳感器&#xff09;?采用光柵尺輸出正交脈沖信號&#xff0c;分辨率達0.5μm&#xff0c;精度1μ…

NW831NW910美光固態閃存NW887NW888

美光固態閃存深度解析&#xff1a;NW831、NW910、NW887、NW888系列全方位評測一、技術根基與架構創新美光NW系列固態閃存的技術突破源于其先進的G9 NAND架構&#xff0c;該架構采用5納米制程工藝和多層3D堆疊技術&#xff0c;在單位面積內實現了高達256層的存儲單元堆疊&#x…