使用 OpenCV 實現 ArUco 碼識別與坐標軸繪制

🎯 使用 OpenCV 實現 ArUco 碼識別與坐標軸繪制(含Python源碼)

Aruco 是一種廣泛用于機器人、增強現實(AR)和相機標定的方形標記系統。本文將帶你一步一步使用 Python + OpenCV 實現圖像中多個 ArUco 碼的檢測與坐標軸顯示,最終實現“識別 + 姿態估計 + 坐標系可視化”的完整功能。


🧰 準備工作

首先,確保你安裝了 OpenCV 的完整版本(含 aruco 模塊):

pip install opencv-python opencv-contrib-python

📷 相機內參與畸變參數

要繪制每個 ArUco 碼的坐標軸,我們必須知道相機的內參和畸變參數。

示例內參(請替換為你自己的標定結果):

camera_matrix = np.array([[800, 0, 320],[0, 800, 240],[0,   0,   1]
], dtype=np.float32)dist_coeffs = np.zeros((5, 1))  # 假設無畸變

📌 注:真實使用中建議通過 OpenCV 標定獲得準確的相機參數,否則坐標軸可能會顯示錯誤。


🧪 ArUco 碼識別與坐標系繪制代碼

import cv2
import cv2.aruco as aruco
import numpy as np# 讀取圖像
image = cv2.imread('your_image.jpg')  # 替換為你的圖像路徑
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 加載 ArUco 字典和檢測參數
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()# 檢測 ArUco 標記
corners, ids, rejected = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)# 相機參數(需根據你自己相機情況修改)
camera_matrix = np.array([[800, 0, 320],[0, 800, 240],[0,   0,   1]
], dtype=np.float32)dist_coeffs = np.zeros((5, 1))  # 簡化處理,假設無畸變# 設置坐標軸長度(單位視實際情況而定)
axis_length = 0.05if ids is not None:# 繪制檢測到的 ArUco 邊框與 IDaruco.drawDetectedMarkers(image, corners, ids)# 遍歷每個檢測到的 ArUco 碼,估計姿態并繪制坐標軸for i in range(len(ids)):rvec, tvec, _ = aruco.estimatePoseSingleMarkers(corners[i], 0.05, camera_matrix, dist_coeffs)aruco.drawAxis(image, camera_matrix, dist_coeffs, rvec, tvec, axis_length)print("Detected ArUco IDs:", ids.flatten())
else:print("No ArUco markers detected.")# 顯示結果圖像
cv2.imshow("Aruco Marker with Axes", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

🔍 運行效果

運行后你會看到每個 ArUco 碼不僅被識別并繪制出邊框,還會有一個三維坐標軸覆蓋在上面:

  • 紅色:X 軸
  • 綠色:Y 軸
  • 藍色:Z 軸(垂直于平面)

這對于調試機器人視覺系統或驗證相機姿態估計非常有用。


🧠 常見問題

? 沒有檢測到 ArUco 碼?

  • 檢查圖像中是否清晰可見 ArUco 碼。
  • 確保使用了正確的字典(如:DICT_6X6_250)。
  • 嘗試增加圖像對比度或使用高分辨率圖像。

? 坐標軸顯示不對?

  • 檢查相機內參是否正確。
  • 確保 ArUco 實際尺寸與你設置的一致(代碼中 0.05 代表碼的邊長是 5cm)。

📘 總結

通過本文你已經學會了:

  • 如何使用 OpenCV 檢測 ArUco 碼
  • 如何繪制檢測結果和每個碼的姿態坐標軸
  • 如何利用相機內參進行精確的三維可視化

請添加圖片描述

在這里插入圖片描述

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

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

相關文章

Qt 控件發展歷程 + 目標(1)

文章目錄 聲明簡述控件的發展歷程學習目標QWidget屬性 簡介:這篇文章只是一個引子,介紹一點與控件相關的但不重要的內容(瀏覽瀏覽即可),這一章節最為重要的還是要把之后常用且重要的控件屬性和作用給學透,學…

socc 19 echash論文部分解讀

前言:論文還是得吃透才行,不然很多細節有問題 q1 object和data chunck哪一個大 根據論文,一個 data chunk 通常比一個 object 大,因為它是由多個 object 組合而成的 。 論文中提到,cross-coding 會將多個 object 組合…

w~自動駕駛~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12371169 #世界模型和DriveGPT這類大模型到底能給自動駕駛帶來什么ne 以下分享大模型與自動駕駛結合的相關工作9篇論 1、ADAPT ADAPT: Action-aware Driving Caption Transformer(ICRA2023) A…

【paddle】常見的數學運算

根據提供的 PaddlePaddle 函數列表,我們可以將它們按照數學運算、邏輯運算、三角函數、特殊函數、統計函數、張量操作和其他操作等類型進行分類。以下是根據函數功能進行的分類: 取整運算 Rounding functions 代碼描述round(x)距離 x 最近的整數floor(…

繪制音頻信號的各種頻譜圖,包括Mel頻譜圖、STFT頻譜圖等。它不僅能夠繪制頻譜圖librosa.display.specshow

librosa.display.specshow 是一個非常方便的函數,用于繪制音頻信號的各種頻譜圖,包括Mel頻譜圖、STFT頻譜圖等。它不僅能夠繪制頻譜圖,還能自動設置軸標簽和刻度,使得生成的圖像更加直觀和易于理解。 ### 函數簽名 python libros…

DDR DFI 5.2 協議接口學習梳理筆記01

備注:本文新增對各種時鐘含義做了明確定義區分,避免大家產生誤解,這也是5.2版本新引入的。 1. 前言 截止2025年5月,DFI協議最新版本為 5.2,我們首先看一下過去幾代的演進: DFI全稱DDR PHY Interface,是一種接口協議,定義了 Controller 和 PHY 之間接口的信號、時序以…

windows篡改腳本提醒

? 功能簡介 該監控系統具備如下主要功能: 📁 目錄監控 實時監聽指定主目錄及其所有子目錄內文件的變動情況。 🔒 文件哈希校驗 對文件內容生成 SHA256 哈希,確保變更檢測基于內容而非時間戳。 🚫 排除機制 支…

文章記單詞 | 第102篇(六級)

一,單詞釋義 apologize /??p?l?d?a?z/ v. 道歉;認錯discharge /d?s?t?ɑ?rd?/ v./n. 排出;釋放;解雇; dischargequiver /?kw?v?r/ v./n. 顫抖;抖動;箭筒plantation /pln?te??…

【DCGMI專題1】---DCGMI 在 Ubuntu 22.04 上的深度安裝指南與原理分析(含架構圖解)

目錄 一、DCGMI 概述與應用場景 二、Ubuntu 22.04 系統準備 2.1 系統要求 2.2 環境清理(可選) 三、DCGMI 安裝步驟(詳細圖解) 3.1 安裝流程總覽 3.2 分步操作指南 3.2.1 系統更新與依賴安裝 3.2.2 添加 NVIDIA 官方倉庫 3.2.3 安裝數據中心驅動與 DCGM 3.2.4 服務…

主成分分析(PCA)法例題——給定協方差矩陣

已知樣本集合的協方差矩陣為 C x 1 10 [ 3 1 1 1 3 ? 1 1 ? 1 3 ] {\bm C}_x \frac{1}{10} \begin{bmatrix} 3 & 1 & 1 \\ 1 & 3 & -1 \\ 1 & -1 & 3 \end{bmatrix} Cx?101? ?311?13?1?1?13? ? 使用PCA方法將樣本向量降到二維 。 求解 計…

uni-app(4):js語法、css語法

1 js語法 uni-app的js API由標準ECMAScript的js API 和 uni 擴展 API 這兩部分組成。標準ECMAScript的js僅是最基礎的js。瀏覽器基于它擴展了window、document、navigator等對象。小程序也基于標準js擴展了各種wx.xx、my.xx、swan.xx的API。node也擴展了fs等模塊。uni-app基于E…

Idea 配合 devtools 依賴 實現熱部署

核心依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> yaml配置 spring: #…

leetcode513.找樹左下角的值:遞歸深度優先搜索中的最左節點追蹤之道

一、題目本質與核心訴求解析 在二叉樹算法問題中&#xff0c;"找樹左下角的值"是一個典型的結合深度與位置判斷的問題。題目要求我們找到二叉樹中最深層最左邊的節點值&#xff0c;這里的"左下角"有兩個關鍵限定&#xff1a; 深度優先&#xff1a;必須是…

Python入門手冊:Python基礎語法

Python是一種簡潔、易讀且功能強大的編程語言&#xff0c;非常適合初學者入門。無論你是編程新手&#xff0c;還是有一定編程基礎但想學習Python的開發者&#xff0c;掌握Python的基礎語法都是邁向高效編程的第一步。本文將詳細介紹Python的基本語法&#xff0c;包括變量和數據…

postgresql 常用參數配置

#01 - Connection-Authentication 優化點&#xff1a; listen_addresses 0.0.0.0 建議&#xff1a;生產環境應限制為具體IP&#xff08;如 192.168.1.0/24,127.0.0.1&#xff09;&#xff0c;避免暴露到公網。 ssl off 建議&#xff1a;啟用SSL&#xff08;ssl on&#xf…

POI模板生成EXCEL 64000 style in a .xlsx Workbook

業務場景&#xff1a; 項目需要生成多個EXCEL表格&#xff0c;每個表格根據數據列表的大小動態增加Excel的行數&#xff0c;要保證新插入行的樣式與模板完全一致 考慮使用以下方法保證樣式的統一 cloneStyleFrom(templateStyle); 但是由于數據量比較大&#xff0c;拋出如下的…

HJ106 字符逆序【牛客網】

文章目錄 零、原題鏈接一、題目描述二、測試用例三、解題思路四、參考代碼 零、原題鏈接 HJ106 字符逆序 一、題目描述 二、測試用例 三、解題思路 基本思路&#xff1a; ??考慮到可能會有多個空格&#xff0c;使用使用 getline 函數直接讀取一行。 ??如果可以直接打印的…

CI/CD的演進之路

CI/CD的演進之路 一、CI/CD的成長演變 早期起源與初步實踐&#xff1a;CI/CD的概念可以追溯到軟件開發的早期階段&#xff0c;但真正開始受到關注是在敏捷開發方法興起之后。在傳統的瀑布模型開發模式下&#xff0c;軟件開發周期長、發布頻率低&#xff0c;更新往往需要數月甚…

制作一款打飛機游戲55:擴散

子彈模式 ?瘋狂的子彈地獄?&#xff1a; 嘿&#xff0c;伙計們&#xff0c;今天我們要創造一些令人印象深刻的子彈模式。這就是所謂的“子彈地獄”&#xff01; ?問題與挑戰?&#xff1a; 在之前的開發中&#xff0c;我們遇到了一些問題。特別是關于如何處理子彈的角度問題…

Vortex GPGPU的github流程跑通與功能模塊波形探索(三)

文章目錄 前言一、./build/ci下的文件結構二、基于驅動進行仿真過程牽扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 額外牽扯到的ramulator2.3.1 ramulator簡單介紹2.3.2 ramulator使用方法2.3.3 ramulator的輸出2.3.4 ramulator的復現2.3.4.1 調試與驗證&#xff08;第 4.1 節…