日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Python,OpenCV生成Aruco标记

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Python,OpenCV生成Aruco标记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇博客將介紹Aruco標記是什么,以及如何使用Python,OpenCV生成Aruco標記。本文提供倆種生成方式:在線生成和代碼生成;

使用OpenCV處理ArUco標簽非常簡單,因為OpenCV庫中內置的子模塊cv2.aruco(即不需要任何額外的Python包或依賴項來檢測ArUco標記)。生成了Aruco標簽,下一篇博客將介紹如何獲取生成的標簽,并在圖像和實時視頻流中實際檢測它們。

1. 效果圖

DICT_5X5_100_id88.png 生成DICT_5X5_100類型的唯一id88的Aruco標記

多個DICT_5X5_100類型標記的概覽效果圖

2. 原理

2.1 ArUco標記是什么,為什么使用它?

與AprilTags類似,ArUco標記是計算機視覺算法可以輕易檢測到的二進制圖案。主要使用場景有:相機校準、物體大小估計、測量相機和物體之間的距離、三維位置估計、物體方向、機器人學和自主導航。

與AprilTags相比,使用ArUco標記的主要好處包括:

  • ArUco標記內嵌于cv2.ruco子模塊;
  • OpenCV庫本身可以通過cv2.aluco.drawMarker函數生成ArUco標記;
  • 有一些在線的ArUco生成器,而AprilTags的在線生成器不好找到;
  • 有ROS(Robot Operating System機器人操作系統)對ArUco標記的實現;
  • ArUco標記的檢測更準確

2.2 cv2.ruco.drawMarker函數

OpenCV庫有一個內置的ArUco標記生成器(cv2.ruco.drawMarker)。這個函數的參數包括

  • arucoDict: 指定所使用的ArUco標記類型的字典
  • id: 要畫的標記的ID(必須是ArUco字典中的有效ID)
  • sidePixels: 將繪制ArUco標記的(方形)圖像的像素大小
  • borderBits: 邊框的寬度和高度(像素),表示生成標記外邊框便于檢測;
    drawMarker函數返回畫有ArUco標記的輸出圖像。

ArUco字典指定了正在生成和檢測的ArUco標記的類型。如果沒有字典將無法生成和檢測這些標記。

2.3 ArUco字典的種類及命名規則

ARUCO_DICT = {
“DICT_4X4_50”: cv2.aruco.DICT_4X4_50,
“DICT_4X4_100”: cv2.aruco.DICT_4X4_100,
“DICT_4X4_250”: cv2.aruco.DICT_4X4_250,
“DICT_4X4_1000”: cv2.aruco.DICT_4X4_1000,
“DICT_5X5_50”: cv2.aruco.DICT_5X5_50,
“DICT_5X5_100”: cv2.aruco.DICT_5X5_100,
“DICT_5X5_250”: cv2.aruco.DICT_5X5_250,
“DICT_5X5_1000”: cv2.aruco.DICT_5X5_1000,
“DICT_6X6_50”: cv2.aruco.DICT_6X6_50,
“DICT_6X6_100”: cv2.aruco.DICT_6X6_100,
“DICT_6X6_250”: cv2.aruco.DICT_6X6_250,
“DICT_6X6_1000”: cv2.aruco.DICT_6X6_1000,
“DICT_7X7_50”: cv2.aruco.DICT_7X7_50,
“DICT_7X7_100”: cv2.aruco.DICT_7X7_100,
“DICT_7X7_250”: cv2.aruco.DICT_7X7_250,
“DICT_7X7_1000”: cv2.aruco.DICT_7X7_1000,
“DICT_ARUCO_ORIGINAL”: cv2.aruco.DICT_ARUCO_ORIGINAL,
“DICT_APRILTAG_16h5”: cv2.aruco.DICT_APRILTAG_16h5,
“DICT_APRILTAG_25h9”: cv2.aruco.DICT_APRILTAG_25h9,
“DICT_APRILTAG_36h10”: cv2.aruco.DICT_APRILTAG_36h10,
“DICT_APRILTAG_36h11”: cv2.aruco.DICT_APRILTAG_36h11
}

cv2.aruco.DICT_NxN_M,NxN值是ArUco標記的2D位大小。例如,對于6×6標記總共有36位,網格大小后面的整數M指定了可以使用該字典生成的唯一ArUco ID的總數。
如:cv2.aruco.DICT_4X4_50 表示要生成一個二進制的4×4平方阿魯科標記。使用這個字典能生成50個獨特的阿魯科標記ID。

2.4 如何決定要使用哪種阿魯科標記詞典呢?

首先查看需要的字典中有多少個唯一值;然后查看輸入的圖像/視頻分辨率大小。
OpenCV的ArUco檢測實現利用錯誤校正來提高標記檢測的準確性和魯棒性。 糾錯取決于標記間距離。
較小的字典大小和較大的NxN標記大小會增加標記間的距離,從而降低錯誤讀數的可能性。

阿魯科詞典的理想設置包括:

  • 需要生成和讀取的唯一ArUco ID數量較少
  • 包含將被檢測到的阿魯科標記的高質量圖像輸入
  • 更大的NxN網格大小,與少量獨特的ArUco ID相平衡,以便標記間距離可用于糾正誤讀標記

3. 源碼

在線生成Aruco標記
在線svg轉png

# 三部曲——使用Python,Opencv生成Aruco標記,檢測圖像和視頻流中的Aruco標記,檢測標記的類型# 使用Python,Opencv生成Aruco標記
# 與AprilTags類似,ArUco標記是計算機視覺算法可以輕易檢測到的二進制圖案。主要使用場景有:相機校準、物體大小估計、測量相機和物體之間的距離、三維位置估計、物體方向、機器人學和自主導航
# 與AprilTags相比,使用ArUco標記的主要好處包括:ArUco標記內嵌于cv2.ruco子模塊;OpenCV庫可以通過cv2.aluco.drawMarker函數生成ArUco標記;有在線的ArUco生成器,而AprilTags的在線生成器不好找到;有ROS(Robot Operating System機器人操作系統)對ArUco標記的實現;ArUco標記的檢測更準確;
# 生成ArUco標記的步驟:1. 選擇ArUco字典;2. 定義要繪制的ArUcoID; 3. 定義像素級別的ArUco圖像大小; 4. 調用drawMarker函數繪制ArUco標志;# python opencv_generate_aruco.py --id 24 --type DICT_5X5_100 --output tags/DICT_5X5_100_id24.png
# 導入必要的包
import numpy as np  # 定義空數組保存生成好的Aruco標記
import argparse
import cv2
import sys# 構建命令行參數及解析
# -o 輸出保存Aruco標記的圖片路徑
# -i ArUco標簽的唯一標識符--該ID必須是用于生成標簽的ArUco字典中的有效ID
# -t 用于生成標簽的ArUco字典的名稱;默認情況下將使用原始的ArUco字典
ap = argparse.ArgumentParser()
ap.add_argument("-o", "--output", required=True,help="path to output image containing ArUCo tag")
ap.add_argument("-i", "--id", type=int, required=True,help="ID of ArUCo tag to generate")
ap.add_argument("-t", "--type", type=str,default="DICT_ARUCO_ORIGINAL",help="type of ArUCo tag to generate")
args = vars(ap.parse_args())# 定義opencv支持的Aruco標記名稱映射字典
ARUCO_DICT = {"DICT_4X4_50": cv2.aruco.DICT_4X4_50,"DICT_4X4_100": cv2.aruco.DICT_4X4_100,"DICT_4X4_250": cv2.aruco.DICT_4X4_250,"DICT_4X4_1000": cv2.aruco.DICT_4X4_1000,"DICT_5X5_50": cv2.aruco.DICT_5X5_50,"DICT_5X5_100": cv2.aruco.DICT_5X5_100,"DICT_5X5_250": cv2.aruco.DICT_5X5_250,"DICT_5X5_1000": cv2.aruco.DICT_5X5_1000,"DICT_6X6_50": cv2.aruco.DICT_6X6_50,"DICT_6X6_100": cv2.aruco.DICT_6X6_100,"DICT_6X6_250": cv2.aruco.DICT_6X6_250,"DICT_6X6_1000": cv2.aruco.DICT_6X6_1000,"DICT_7X7_50": cv2.aruco.DICT_7X7_50,"DICT_7X7_100": cv2.aruco.DICT_7X7_100,"DICT_7X7_250": cv2.aruco.DICT_7X7_250,"DICT_7X7_1000": cv2.aruco.DICT_7X7_1000,"DICT_ARUCO_ORIGINAL": cv2.aruco.DICT_ARUCO_ORIGINAL,"DICT_APRILTAG_16h5": cv2.aruco.DICT_APRILTAG_16h5,"DICT_APRILTAG_25h9": cv2.aruco.DICT_APRILTAG_25h9,"DICT_APRILTAG_36h10": cv2.aruco.DICT_APRILTAG_36h10,"DICT_APRILTAG_36h11": cv2.aruco.DICT_APRILTAG_36h11
}# 驗證Aruco標簽存在且opencv支持
if ARUCO_DICT.get(args["type"], None) is None:print("[INFO] ArUCo tag of '{}' is not supported".format(args["type"]))sys.exit(0)# 加載ArUCo字典
arucoDict = cv2.aruco.Dictionary_get(ARUCO_DICT[args["type"]])# 定義內存數組以存儲繪制了Aruco標記的圖片
print("[INFO] generating ArUCo tag type '{}' with ID '{}'".format(args["type"], args["id"]))
tag = np.zeros((300, 300, 1), dtype="uint8")
cv2.aruco.drawMarker(arucoDict, args["id"], 300, tag, 1)# 保存生成的Aruco標簽圖片到磁盤并顯示
cv2.imwrite(args["output"], tag)
cv2.imshow("ArUCo Tag", tag)
cv2.waitKey(0)

參考

  • https://pyimagesearch.com/2020/12/14/generating-aruco-markers-with-opencv-and-python/

總結

以上是生活随笔為你收集整理的使用Python,OpenCV生成Aruco标记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。