Health/Assets/OpenCVForUnity/org/opencv/objdetect/Dictionary.cs

411 lines
13 KiB
C#
Raw Normal View History

2023-11-07 13:55:35 +00:00
using OpenCVForUnity.CoreModule;
using OpenCVForUnity.UtilsModule;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace OpenCVForUnity.ObjdetectModule
{
// C++: class Dictionary
/**
* Dictionary/Set of markers, it contains the inner codification
*
* BytesList contains the marker codewords where:
* - bytesList.rows is the dictionary size
* - each marker is encoded using {code nbytes = ceil(markerSize*markerSize/8.)}
* - each row contains all 4 rotations of the marker, so its length is {code 4*nbytes}
*
* {code bytesList.ptr(i)[k*nbytes + j]} is then the j-th byte of i-th marker, in its k-th rotation.
*/
public class Dictionary : DisposableOpenCVObject
{
protected override void Dispose(bool disposing)
{
try
{
if (disposing)
{
}
if (IsEnabledDispose)
{
if (nativeObj != IntPtr.Zero)
objdetect_Dictionary_delete(nativeObj);
nativeObj = IntPtr.Zero;
}
}
finally
{
base.Dispose(disposing);
}
}
protected internal Dictionary(IntPtr addr) : base(addr) { }
public IntPtr getNativeObjAddr() { return nativeObj; }
// internal usage only
public static Dictionary __fromPtr__(IntPtr addr) { return new Dictionary(addr); }
//
// C++: cv::aruco::Dictionary::Dictionary()
//
public Dictionary()
{
nativeObj = DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_Dictionary_10());
}
//
// C++: cv::aruco::Dictionary::Dictionary(Mat bytesList, int _markerSize, int maxcorr = 0)
//
public Dictionary(Mat bytesList, int _markerSize, int maxcorr)
{
if (bytesList != null) bytesList.ThrowIfDisposed();
nativeObj = DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_Dictionary_11(bytesList.nativeObj, _markerSize, maxcorr));
}
public Dictionary(Mat bytesList, int _markerSize)
{
if (bytesList != null) bytesList.ThrowIfDisposed();
nativeObj = DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_Dictionary_12(bytesList.nativeObj, _markerSize));
}
//
// C++: bool cv::aruco::Dictionary::readDictionary(FileNode fn)
//
// Unknown type 'FileNode' (I), skipping the function
//
// C++: void cv::aruco::Dictionary::writeDictionary(FileStorage fs, String name = String())
//
// Unknown type 'FileStorage' (I), skipping the function
//
// C++: bool cv::aruco::Dictionary::identify(Mat onlyBits, int& idx, int& rotation, double maxCorrectionRate)
//
/**
* Given a matrix of bits. Returns whether if marker is identified or not.
*
* It returns by reference the correct id (if any) and the correct rotation
* param onlyBits automatically generated
* param idx automatically generated
* param rotation automatically generated
* param maxCorrectionRate automatically generated
* return automatically generated
*/
public bool identify(Mat onlyBits, int[] idx, int[] rotation, double maxCorrectionRate)
{
ThrowIfDisposed();
if (onlyBits != null) onlyBits.ThrowIfDisposed();
double[] idx_out = new double[1];
double[] rotation_out = new double[1];
bool retVal = objdetect_Dictionary_identify_10(nativeObj, onlyBits.nativeObj, idx_out, rotation_out, maxCorrectionRate);
if (idx != null) idx[0] = (int)idx_out[0];
if (rotation != null) rotation[0] = (int)rotation_out[0];
return retVal;
}
//
// C++: int cv::aruco::Dictionary::getDistanceToId(Mat bits, int id, bool allRotations = true)
//
/**
* Returns the distance of the input bits to the specific id.
*
* If allRotations is true, the four posible bits rotation are considered
* param bits automatically generated
* param id automatically generated
* param allRotations automatically generated
* return automatically generated
*/
public int getDistanceToId(Mat bits, int id, bool allRotations)
{
ThrowIfDisposed();
if (bits != null) bits.ThrowIfDisposed();
return objdetect_Dictionary_getDistanceToId_10(nativeObj, bits.nativeObj, id, allRotations);
}
/**
* Returns the distance of the input bits to the specific id.
*
* If allRotations is true, the four posible bits rotation are considered
* param bits automatically generated
* param id automatically generated
* return automatically generated
*/
public int getDistanceToId(Mat bits, int id)
{
ThrowIfDisposed();
if (bits != null) bits.ThrowIfDisposed();
return objdetect_Dictionary_getDistanceToId_11(nativeObj, bits.nativeObj, id);
}
//
// C++: void cv::aruco::Dictionary::generateImageMarker(int id, int sidePixels, Mat& _img, int borderBits = 1)
//
/**
* Generate a canonical marker image
* param id automatically generated
* param sidePixels automatically generated
* param _img automatically generated
* param borderBits automatically generated
*/
public void generateImageMarker(int id, int sidePixels, Mat _img, int borderBits)
{
ThrowIfDisposed();
if (_img != null) _img.ThrowIfDisposed();
objdetect_Dictionary_generateImageMarker_10(nativeObj, id, sidePixels, _img.nativeObj, borderBits);
}
/**
* Generate a canonical marker image
* param id automatically generated
* param sidePixels automatically generated
* param _img automatically generated
*/
public void generateImageMarker(int id, int sidePixels, Mat _img)
{
ThrowIfDisposed();
if (_img != null) _img.ThrowIfDisposed();
objdetect_Dictionary_generateImageMarker_11(nativeObj, id, sidePixels, _img.nativeObj);
}
//
// C++: static Mat cv::aruco::Dictionary::getByteListFromBits(Mat bits)
//
/**
* Transform matrix of bits to list of bytes in the 4 rotations
* param bits automatically generated
* return automatically generated
*/
public static Mat getByteListFromBits(Mat bits)
{
if (bits != null) bits.ThrowIfDisposed();
return new Mat(DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_getByteListFromBits_10(bits.nativeObj)));
}
//
// C++: static Mat cv::aruco::Dictionary::getBitsFromByteList(Mat byteList, int markerSize)
//
/**
* Transform list of bytes to matrix of bits
* param byteList automatically generated
* param markerSize automatically generated
* return automatically generated
*/
public static Mat getBitsFromByteList(Mat byteList, int markerSize)
{
if (byteList != null) byteList.ThrowIfDisposed();
return new Mat(DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_getBitsFromByteList_10(byteList.nativeObj, markerSize)));
}
//
// C++: Mat Dictionary::bytesList
//
public Mat get_bytesList()
{
ThrowIfDisposed();
return new Mat(DisposableObject.ThrowIfNullIntPtr(objdetect_Dictionary_get_1bytesList_10(nativeObj)));
}
//
// C++: void Dictionary::bytesList
//
public void set_bytesList(Mat bytesList)
{
ThrowIfDisposed();
if (bytesList != null) bytesList.ThrowIfDisposed();
objdetect_Dictionary_set_1bytesList_10(nativeObj, bytesList.nativeObj);
}
//
// C++: int Dictionary::markerSize
//
public int get_markerSize()
{
ThrowIfDisposed();
return objdetect_Dictionary_get_1markerSize_10(nativeObj);
}
//
// C++: void Dictionary::markerSize
//
public void set_markerSize(int markerSize)
{
ThrowIfDisposed();
objdetect_Dictionary_set_1markerSize_10(nativeObj, markerSize);
}
//
// C++: int Dictionary::maxCorrectionBits
//
public int get_maxCorrectionBits()
{
ThrowIfDisposed();
return objdetect_Dictionary_get_1maxCorrectionBits_10(nativeObj);
}
//
// C++: void Dictionary::maxCorrectionBits
//
public void set_maxCorrectionBits(int maxCorrectionBits)
{
ThrowIfDisposed();
objdetect_Dictionary_set_1maxCorrectionBits_10(nativeObj, maxCorrectionBits);
}
#if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
const string LIBNAME = "__Internal";
#else
const string LIBNAME = "opencvforunity";
#endif
// C++: cv::aruco::Dictionary::Dictionary()
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_Dictionary_10();
// C++: cv::aruco::Dictionary::Dictionary(Mat bytesList, int _markerSize, int maxcorr = 0)
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_Dictionary_11(IntPtr bytesList_nativeObj, int _markerSize, int maxcorr);
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_Dictionary_12(IntPtr bytesList_nativeObj, int _markerSize);
// C++: bool cv::aruco::Dictionary::identify(Mat onlyBits, int& idx, int& rotation, double maxCorrectionRate)
[DllImport(LIBNAME)]
[return: MarshalAs(UnmanagedType.U1)]
private static extern bool objdetect_Dictionary_identify_10(IntPtr nativeObj, IntPtr onlyBits_nativeObj, double[] idx_out, double[] rotation_out, double maxCorrectionRate);
// C++: int cv::aruco::Dictionary::getDistanceToId(Mat bits, int id, bool allRotations = true)
[DllImport(LIBNAME)]
private static extern int objdetect_Dictionary_getDistanceToId_10(IntPtr nativeObj, IntPtr bits_nativeObj, int id, [MarshalAs(UnmanagedType.U1)] bool allRotations);
[DllImport(LIBNAME)]
private static extern int objdetect_Dictionary_getDistanceToId_11(IntPtr nativeObj, IntPtr bits_nativeObj, int id);
// C++: void cv::aruco::Dictionary::generateImageMarker(int id, int sidePixels, Mat& _img, int borderBits = 1)
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_generateImageMarker_10(IntPtr nativeObj, int id, int sidePixels, IntPtr _img_nativeObj, int borderBits);
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_generateImageMarker_11(IntPtr nativeObj, int id, int sidePixels, IntPtr _img_nativeObj);
// C++: static Mat cv::aruco::Dictionary::getByteListFromBits(Mat bits)
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_getByteListFromBits_10(IntPtr bits_nativeObj);
// C++: static Mat cv::aruco::Dictionary::getBitsFromByteList(Mat byteList, int markerSize)
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_getBitsFromByteList_10(IntPtr byteList_nativeObj, int markerSize);
// C++: Mat Dictionary::bytesList
[DllImport(LIBNAME)]
private static extern IntPtr objdetect_Dictionary_get_1bytesList_10(IntPtr nativeObj);
// C++: void Dictionary::bytesList
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_set_1bytesList_10(IntPtr nativeObj, IntPtr bytesList_nativeObj);
// C++: int Dictionary::markerSize
[DllImport(LIBNAME)]
private static extern int objdetect_Dictionary_get_1markerSize_10(IntPtr nativeObj);
// C++: void Dictionary::markerSize
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_set_1markerSize_10(IntPtr nativeObj, int markerSize);
// C++: int Dictionary::maxCorrectionBits
[DllImport(LIBNAME)]
private static extern int objdetect_Dictionary_get_1maxCorrectionBits_10(IntPtr nativeObj);
// C++: void Dictionary::maxCorrectionBits
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_set_1maxCorrectionBits_10(IntPtr nativeObj, int maxCorrectionBits);
// native support for java finalize()
[DllImport(LIBNAME)]
private static extern void objdetect_Dictionary_delete(IntPtr nativeObj);
}
}