#!/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()