mirror of
https://github.com/opencv/opencv_contrib.git
synced 2025-10-20 04:25:42 +08:00
69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Python 2/3 compatibility
|
|
from __future__ import print_function
|
|
|
|
import os, numpy as np
|
|
|
|
import cv2 as cv
|
|
|
|
from tests_common import NewOpenCVTests
|
|
|
|
class aruco_test(NewOpenCVTests):
|
|
|
|
def test_aruco_detect_markers(self):
|
|
aruco_params = cv.aruco.DetectorParameters()
|
|
aruco_dict = cv.aruco.getPredefinedDictionary(cv.aruco.DICT_4X4_250)
|
|
id = 2
|
|
marker_size = 100
|
|
offset = 10
|
|
img_marker = cv.aruco.generateImageMarker(aruco_dict, id, marker_size, aruco_params.markerBorderBits)
|
|
img_marker = np.pad(img_marker, pad_width=offset, mode='constant', constant_values=255)
|
|
gold_corners = np.array([[offset, offset],[marker_size+offset-1.0,offset],
|
|
[marker_size+offset-1.0,marker_size+offset-1.0],
|
|
[offset, marker_size+offset-1.0]], dtype=np.float32)
|
|
expected_corners, expected_ids, expected_rejected = cv.aruco.detectMarkers(img_marker, aruco_dict,
|
|
parameters=aruco_params)
|
|
|
|
self.assertEqual(1, len(expected_ids))
|
|
self.assertEqual(id, expected_ids[0])
|
|
for i in range(0, len(expected_corners)):
|
|
np.testing.assert_array_equal(gold_corners, expected_corners[i].reshape(4, 2))
|
|
|
|
def test_drawCharucoDiamond(self):
|
|
aruco_dict = cv.aruco.getPredefinedDictionary(cv.aruco.DICT_4X4_50)
|
|
img = cv.aruco.drawCharucoDiamond(aruco_dict, np.array([0, 1, 2, 3]), 100, 80)
|
|
self.assertTrue(img is not None)
|
|
|
|
def test_write_read_dict(self):
|
|
|
|
try:
|
|
aruco_dict = cv.aruco.getPredefinedDictionary(cv.aruco.DICT_5X5_50)
|
|
markers_gold = aruco_dict.bytesList
|
|
|
|
# write aruco_dict
|
|
filename = "test_dict.yml"
|
|
fs_write = cv.FileStorage(filename, cv.FileStorage_WRITE)
|
|
aruco_dict.writeDictionary(fs_write)
|
|
fs_write.release()
|
|
|
|
# reset aruco_dict
|
|
aruco_dict = cv.aruco.getPredefinedDictionary(cv.aruco.DICT_6X6_250)
|
|
|
|
# read aruco_dict
|
|
fs_read = cv.FileStorage(filename, cv.FileStorage_READ)
|
|
aruco_dict.readDictionary(fs_read.root())
|
|
fs_read.release()
|
|
|
|
# check equal
|
|
self.assertEqual(aruco_dict.markerSize, 5)
|
|
self.assertEqual(aruco_dict.maxCorrectionBits, 3)
|
|
np.testing.assert_array_equal(aruco_dict.bytesList, markers_gold)
|
|
|
|
finally:
|
|
if os.path.exists(filename):
|
|
os.remove(filename)
|
|
|
|
if __name__ == '__main__':
|
|
NewOpenCVTests.bootstrap()
|