123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- using OpenCVForUnity.CoreModule;
- using OpenCVForUnity.UtilsModule;
- using System;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- namespace OpenCVForUnity.ObjdetectModule
- {
- // C++: class CharucoBoard
- /**
- * ChArUco board is a planar chessboard where the markers are placed inside the white squares of a chessboard.
- *
- * The benefits of ChArUco boards is that they provide both, ArUco markers versatility and chessboard corner precision,
- * which is important for calibration and pose estimation. The board image can be drawn using generateImage() method.
- */
- public class CharucoBoard : Board
- {
- protected override void Dispose(bool disposing)
- {
- try
- {
- if (disposing)
- {
- }
- if (IsEnabledDispose)
- {
- if (nativeObj != IntPtr.Zero)
- objdetect_CharucoBoard_delete(nativeObj);
- nativeObj = IntPtr.Zero;
- }
- }
- finally
- {
- base.Dispose(disposing);
- }
- }
- protected internal CharucoBoard(IntPtr addr) : base(addr) { }
- // internal usage only
- public static new CharucoBoard __fromPtr__(IntPtr addr) { return new CharucoBoard(addr); }
- //
- // C++: cv::aruco::CharucoBoard::CharucoBoard(Size size, float squareLength, float markerLength, Dictionary dictionary, Mat ids = Mat())
- //
- /**
- * CharucoBoard constructor
- *
- * param size number of chessboard squares in x and y directions
- * param squareLength squareLength chessboard square side length (normally in meters)
- * param markerLength marker side length (same unit than squareLength)
- * param dictionary dictionary of markers indicating the type of markers
- * param ids array of id used markers
- * The first markers in the dictionary are used to fill the white chessboard squares.
- */
- public CharucoBoard(Size size, float squareLength, float markerLength, Dictionary dictionary, Mat ids) :
- base(DisposableObject.ThrowIfNullIntPtr(objdetect_CharucoBoard_CharucoBoard_10(size.width, size.height, squareLength, markerLength, dictionary.nativeObj, ids.nativeObj)))
- {
- }
- /**
- * CharucoBoard constructor
- *
- * param size number of chessboard squares in x and y directions
- * param squareLength squareLength chessboard square side length (normally in meters)
- * param markerLength marker side length (same unit than squareLength)
- * param dictionary dictionary of markers indicating the type of markers
- * The first markers in the dictionary are used to fill the white chessboard squares.
- */
- public CharucoBoard(Size size, float squareLength, float markerLength, Dictionary dictionary) :
- base(DisposableObject.ThrowIfNullIntPtr(objdetect_CharucoBoard_CharucoBoard_11(size.width, size.height, squareLength, markerLength, dictionary.nativeObj)))
- {
- }
- //
- // C++: void cv::aruco::CharucoBoard::setLegacyPattern(bool legacyPattern)
- //
- /**
- * set legacy chessboard pattern.
- *
- * Legacy setting creates chessboard patterns starting with a white box in the upper left corner
- * if there is an even row count of chessboard boxes, otherwise it starts with a black box.
- * This setting ensures compatibility to patterns created with OpenCV versions prior OpenCV 4.6.0.
- * See https://github.com/opencv/opencv/issues/23152.
- *
- * Default value: false.
- * param legacyPattern automatically generated
- */
- public void setLegacyPattern(bool legacyPattern)
- {
- ThrowIfDisposed();
- objdetect_CharucoBoard_setLegacyPattern_10(nativeObj, legacyPattern);
- }
- //
- // C++: bool cv::aruco::CharucoBoard::getLegacyPattern()
- //
- public bool getLegacyPattern()
- {
- ThrowIfDisposed();
- return objdetect_CharucoBoard_getLegacyPattern_10(nativeObj);
- }
- //
- // C++: Size cv::aruco::CharucoBoard::getChessboardSize()
- //
- public Size getChessboardSize()
- {
- ThrowIfDisposed();
- double[] tmpArray = new double[2];
- objdetect_CharucoBoard_getChessboardSize_10(nativeObj, tmpArray);
- Size retVal = new Size(tmpArray);
- return retVal;
- }
- //
- // C++: float cv::aruco::CharucoBoard::getSquareLength()
- //
- public float getSquareLength()
- {
- ThrowIfDisposed();
- return objdetect_CharucoBoard_getSquareLength_10(nativeObj);
- }
- //
- // C++: float cv::aruco::CharucoBoard::getMarkerLength()
- //
- public float getMarkerLength()
- {
- ThrowIfDisposed();
- return objdetect_CharucoBoard_getMarkerLength_10(nativeObj);
- }
- //
- // C++: vector_Point3f cv::aruco::CharucoBoard::getChessboardCorners()
- //
- /**
- * get CharucoBoard::chessboardCorners
- * return automatically generated
- */
- public MatOfPoint3f getChessboardCorners()
- {
- ThrowIfDisposed();
- return MatOfPoint3f.fromNativeAddr(DisposableObject.ThrowIfNullIntPtr(objdetect_CharucoBoard_getChessboardCorners_10(nativeObj)));
- }
- //
- // C++: bool cv::aruco::CharucoBoard::checkCharucoCornersCollinear(Mat charucoIds)
- //
- /**
- * check whether the ChArUco markers are collinear
- *
- * param charucoIds list of identifiers for each corner in charucoCorners per frame.
- * return bool value, 1 (true) if detected corners form a line, 0 (false) if they do not.
- * solvePnP, calibration functions will fail if the corners are collinear (true).
- *
- * The number of ids in charucoIDs should be <= the number of chessboard corners in the board.
- * This functions checks whether the charuco corners are on a straight line (returns true, if so), or not (false).
- * Axis parallel, as well as diagonal and other straight lines detected. Degenerate cases:
- * for number of charucoIDs <= 2,the function returns true.
- */
- public bool checkCharucoCornersCollinear(Mat charucoIds)
- {
- ThrowIfDisposed();
- if (charucoIds != null) charucoIds.ThrowIfDisposed();
- return objdetect_CharucoBoard_checkCharucoCornersCollinear_10(nativeObj, charucoIds.nativeObj);
- }
- #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
- const string LIBNAME = "__Internal";
- #else
- const string LIBNAME = "opencvforunity";
- #endif
- // C++: cv::aruco::CharucoBoard::CharucoBoard(Size size, float squareLength, float markerLength, Dictionary dictionary, Mat ids = Mat())
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_CharucoBoard_CharucoBoard_10(double size_width, double size_height, float squareLength, float markerLength, IntPtr dictionary_nativeObj, IntPtr ids_nativeObj);
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_CharucoBoard_CharucoBoard_11(double size_width, double size_height, float squareLength, float markerLength, IntPtr dictionary_nativeObj);
- // C++: void cv::aruco::CharucoBoard::setLegacyPattern(bool legacyPattern)
- [DllImport(LIBNAME)]
- private static extern void objdetect_CharucoBoard_setLegacyPattern_10(IntPtr nativeObj, [MarshalAs(UnmanagedType.U1)] bool legacyPattern);
- // C++: bool cv::aruco::CharucoBoard::getLegacyPattern()
- [DllImport(LIBNAME)]
- [return: MarshalAs(UnmanagedType.U1)]
- private static extern bool objdetect_CharucoBoard_getLegacyPattern_10(IntPtr nativeObj);
- // C++: Size cv::aruco::CharucoBoard::getChessboardSize()
- [DllImport(LIBNAME)]
- private static extern void objdetect_CharucoBoard_getChessboardSize_10(IntPtr nativeObj, double[] retVal);
- // C++: float cv::aruco::CharucoBoard::getSquareLength()
- [DllImport(LIBNAME)]
- private static extern float objdetect_CharucoBoard_getSquareLength_10(IntPtr nativeObj);
- // C++: float cv::aruco::CharucoBoard::getMarkerLength()
- [DllImport(LIBNAME)]
- private static extern float objdetect_CharucoBoard_getMarkerLength_10(IntPtr nativeObj);
- // C++: vector_Point3f cv::aruco::CharucoBoard::getChessboardCorners()
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_CharucoBoard_getChessboardCorners_10(IntPtr nativeObj);
- // C++: bool cv::aruco::CharucoBoard::checkCharucoCornersCollinear(Mat charucoIds)
- [DllImport(LIBNAME)]
- [return: MarshalAs(UnmanagedType.U1)]
- private static extern bool objdetect_CharucoBoard_checkCharucoCornersCollinear_10(IntPtr nativeObj, IntPtr charucoIds_nativeObj);
- // native support for java finalize()
- [DllImport(LIBNAME)]
- private static extern void objdetect_CharucoBoard_delete(IntPtr nativeObj);
- }
- }
|