123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- using OpenCVForUnity.CoreModule;
- using OpenCVForUnity.UtilsModule;
- using System;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- namespace OpenCVForUnity.ObjdetectModule
- {
- // C++: class Objdetect
- public class Objdetect
- {
- // C++: enum <unnamed>
- public const int CASCADE_DO_CANNY_PRUNING = 1;
- public const int CASCADE_SCALE_IMAGE = 2;
- public const int CASCADE_FIND_BIGGEST_OBJECT = 4;
- public const int CASCADE_DO_ROUGH_SEARCH = 8;
- // C++: enum cv.DetectionBasedTracker.ObjectStatus
- public const int DetectionBasedTracker_DETECTED_NOT_SHOWN_YET = 0;
- public const int DetectionBasedTracker_DETECTED = 1;
- public const int DetectionBasedTracker_DETECTED_TEMPORARY_LOST = 2;
- public const int DetectionBasedTracker_WRONG_OBJECT = 3;
- // C++: enum cv.aruco.CornerRefineMethod
- public const int CORNER_REFINE_NONE = 0;
- public const int CORNER_REFINE_SUBPIX = 1;
- public const int CORNER_REFINE_CONTOUR = 2;
- public const int CORNER_REFINE_APRILTAG = 3;
- // C++: enum cv.aruco.PredefinedDictionaryType
- public const int DICT_4X4_50 = 0;
- public const int DICT_4X4_100 = 0 + 1;
- public const int DICT_4X4_250 = 0 + 2;
- public const int DICT_4X4_1000 = 0 + 3;
- public const int DICT_5X5_50 = 0 + 4;
- public const int DICT_5X5_100 = 0 + 5;
- public const int DICT_5X5_250 = 0 + 6;
- public const int DICT_5X5_1000 = 0 + 7;
- public const int DICT_6X6_50 = 0 + 8;
- public const int DICT_6X6_100 = 0 + 9;
- public const int DICT_6X6_250 = 0 + 10;
- public const int DICT_6X6_1000 = 0 + 11;
- public const int DICT_7X7_50 = 0 + 12;
- public const int DICT_7X7_100 = 0 + 13;
- public const int DICT_7X7_250 = 0 + 14;
- public const int DICT_7X7_1000 = 0 + 15;
- public const int DICT_ARUCO_ORIGINAL = 0 + 16;
- public const int DICT_APRILTAG_16h5 = 0 + 17;
- public const int DICT_APRILTAG_25h9 = 0 + 18;
- public const int DICT_APRILTAG_36h10 = 0 + 19;
- public const int DICT_APRILTAG_36h11 = 0 + 20;
- public const int DICT_ARUCO_MIP_36h12 = 0 + 21;
- //
- // C++: void cv::groupRectangles(vector_Rect& rectList, vector_int& weights, int groupThreshold, double eps = 0.2)
- //
- public static void groupRectangles(MatOfRect rectList, MatOfInt weights, int groupThreshold, double eps)
- {
- if (rectList != null) rectList.ThrowIfDisposed();
- if (weights != null) weights.ThrowIfDisposed();
- Mat rectList_mat = rectList;
- Mat weights_mat = weights;
- objdetect_Objdetect_groupRectangles_10(rectList_mat.nativeObj, weights_mat.nativeObj, groupThreshold, eps);
- }
- public static void groupRectangles(MatOfRect rectList, MatOfInt weights, int groupThreshold)
- {
- if (rectList != null) rectList.ThrowIfDisposed();
- if (weights != null) weights.ThrowIfDisposed();
- Mat rectList_mat = rectList;
- Mat weights_mat = weights;
- objdetect_Objdetect_groupRectangles_11(rectList_mat.nativeObj, weights_mat.nativeObj, groupThreshold);
- }
- //
- // C++: void cv::aruco::drawDetectedMarkers(Mat& image, vector_Mat corners, Mat ids = Mat(), Scalar borderColor = Scalar(0, 255, 0))
- //
- /**
- * Draw detected markers in image
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not altered.
- * param corners positions of marker corners on input image.
- * (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the dimensions of
- * this array should be Nx4. The order of the corners should be clockwise.
- * param ids vector of identifiers for markers in markersCorners .
- * Optional, if not provided, ids are not painted.
- * param borderColor color of marker borders. Rest of colors (text color and first corner color)
- * are calculated based on this one to improve visualization.
- *
- * Given an array of detected marker corners and its corresponding ids, this functions draws
- * the markers in the image. The marker borders are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedMarkers(Mat image, List<Mat> corners, Mat ids, Scalar borderColor)
- {
- if (image != null) image.ThrowIfDisposed();
- if (ids != null) ids.ThrowIfDisposed();
- Mat corners_mat = Converters.vector_Mat_to_Mat(corners);
- objdetect_Objdetect_drawDetectedMarkers_10(image.nativeObj, corners_mat.nativeObj, ids.nativeObj, borderColor.val[0], borderColor.val[1], borderColor.val[2], borderColor.val[3]);
- }
- /**
- * Draw detected markers in image
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not altered.
- * param corners positions of marker corners on input image.
- * (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the dimensions of
- * this array should be Nx4. The order of the corners should be clockwise.
- * param ids vector of identifiers for markers in markersCorners .
- * Optional, if not provided, ids are not painted.
- * are calculated based on this one to improve visualization.
- *
- * Given an array of detected marker corners and its corresponding ids, this functions draws
- * the markers in the image. The marker borders are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedMarkers(Mat image, List<Mat> corners, Mat ids)
- {
- if (image != null) image.ThrowIfDisposed();
- if (ids != null) ids.ThrowIfDisposed();
- Mat corners_mat = Converters.vector_Mat_to_Mat(corners);
- objdetect_Objdetect_drawDetectedMarkers_11(image.nativeObj, corners_mat.nativeObj, ids.nativeObj);
- }
- /**
- * Draw detected markers in image
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not altered.
- * param corners positions of marker corners on input image.
- * (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers, the dimensions of
- * this array should be Nx4. The order of the corners should be clockwise.
- * Optional, if not provided, ids are not painted.
- * are calculated based on this one to improve visualization.
- *
- * Given an array of detected marker corners and its corresponding ids, this functions draws
- * the markers in the image. The marker borders are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedMarkers(Mat image, List<Mat> corners)
- {
- if (image != null) image.ThrowIfDisposed();
- Mat corners_mat = Converters.vector_Mat_to_Mat(corners);
- objdetect_Objdetect_drawDetectedMarkers_12(image.nativeObj, corners_mat.nativeObj);
- }
- //
- // C++: void cv::aruco::generateImageMarker(Dictionary dictionary, int id, int sidePixels, Mat& img, int borderBits = 1)
- //
- /**
- * Generate a canonical marker image
- *
- * param dictionary dictionary of markers indicating the type of markers
- * param id identifier of the marker that will be returned. It has to be a valid id in the specified dictionary.
- * param sidePixels size of the image in pixels
- * param img output image with the marker
- * param borderBits width of the marker border.
- *
- * This function returns a marker image in its canonical form (i.e. ready to be printed)
- */
- public static void generateImageMarker(Dictionary dictionary, int id, int sidePixels, Mat img, int borderBits)
- {
- if (dictionary != null) dictionary.ThrowIfDisposed();
- if (img != null) img.ThrowIfDisposed();
- objdetect_Objdetect_generateImageMarker_10(dictionary.nativeObj, id, sidePixels, img.nativeObj, borderBits);
- }
- /**
- * Generate a canonical marker image
- *
- * param dictionary dictionary of markers indicating the type of markers
- * param id identifier of the marker that will be returned. It has to be a valid id in the specified dictionary.
- * param sidePixels size of the image in pixels
- * param img output image with the marker
- *
- * This function returns a marker image in its canonical form (i.e. ready to be printed)
- */
- public static void generateImageMarker(Dictionary dictionary, int id, int sidePixels, Mat img)
- {
- if (dictionary != null) dictionary.ThrowIfDisposed();
- if (img != null) img.ThrowIfDisposed();
- objdetect_Objdetect_generateImageMarker_11(dictionary.nativeObj, id, sidePixels, img.nativeObj);
- }
- //
- // C++: Dictionary cv::aruco::getPredefinedDictionary(int dict)
- //
- /**
- * Returns one of the predefined dictionaries referenced by DICT_*.
- * param dict automatically generated
- * return automatically generated
- */
- public static Dictionary getPredefinedDictionary(int dict)
- {
- return new Dictionary(DisposableObject.ThrowIfNullIntPtr(objdetect_Objdetect_getPredefinedDictionary_10(dict)));
- }
- //
- // C++: Dictionary cv::aruco::extendDictionary(int nMarkers, int markerSize, Dictionary baseDictionary = Dictionary(), int randomSeed = 0)
- //
- /**
- * Extend base dictionary by new nMarkers
- *
- * param nMarkers number of markers in the dictionary
- * param markerSize number of bits per dimension of each markers
- * param baseDictionary Include the markers in this dictionary at the beginning (optional)
- * param randomSeed a user supplied seed for theRNG()
- *
- * This function creates a new dictionary composed by nMarkers markers and each markers composed
- * by markerSize x markerSize bits. If baseDictionary is provided, its markers are directly
- * included and the rest are generated based on them. If the size of baseDictionary is higher
- * than nMarkers, only the first nMarkers in baseDictionary are taken and no new marker is added.
- * return automatically generated
- */
- public static Dictionary extendDictionary(int nMarkers, int markerSize, Dictionary baseDictionary, int randomSeed)
- {
- if (baseDictionary != null) baseDictionary.ThrowIfDisposed();
- return new Dictionary(DisposableObject.ThrowIfNullIntPtr(objdetect_Objdetect_extendDictionary_10(nMarkers, markerSize, baseDictionary.nativeObj, randomSeed)));
- }
- /**
- * Extend base dictionary by new nMarkers
- *
- * param nMarkers number of markers in the dictionary
- * param markerSize number of bits per dimension of each markers
- * param baseDictionary Include the markers in this dictionary at the beginning (optional)
- *
- * This function creates a new dictionary composed by nMarkers markers and each markers composed
- * by markerSize x markerSize bits. If baseDictionary is provided, its markers are directly
- * included and the rest are generated based on them. If the size of baseDictionary is higher
- * than nMarkers, only the first nMarkers in baseDictionary are taken and no new marker is added.
- * return automatically generated
- */
- public static Dictionary extendDictionary(int nMarkers, int markerSize, Dictionary baseDictionary)
- {
- if (baseDictionary != null) baseDictionary.ThrowIfDisposed();
- return new Dictionary(DisposableObject.ThrowIfNullIntPtr(objdetect_Objdetect_extendDictionary_11(nMarkers, markerSize, baseDictionary.nativeObj)));
- }
- /**
- * Extend base dictionary by new nMarkers
- *
- * param nMarkers number of markers in the dictionary
- * param markerSize number of bits per dimension of each markers
- *
- * This function creates a new dictionary composed by nMarkers markers and each markers composed
- * by markerSize x markerSize bits. If baseDictionary is provided, its markers are directly
- * included and the rest are generated based on them. If the size of baseDictionary is higher
- * than nMarkers, only the first nMarkers in baseDictionary are taken and no new marker is added.
- * return automatically generated
- */
- public static Dictionary extendDictionary(int nMarkers, int markerSize)
- {
- return new Dictionary(DisposableObject.ThrowIfNullIntPtr(objdetect_Objdetect_extendDictionary_12(nMarkers, markerSize)));
- }
- //
- // C++: void cv::aruco::drawDetectedCornersCharuco(Mat& image, Mat charucoCorners, Mat charucoIds = Mat(), Scalar cornerColor = Scalar(255, 0, 0))
- //
- /**
- * Draws a set of Charuco corners
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param charucoCorners vector of detected charuco corners
- * param charucoIds list of identifiers for each corner in charucoCorners
- * param cornerColor color of the square surrounding each corner
- *
- * This function draws a set of detected Charuco corners. If identifiers vector is provided, it also
- * draws the id of each corner.
- */
- public static void drawDetectedCornersCharuco(Mat image, Mat charucoCorners, Mat charucoIds, Scalar cornerColor)
- {
- if (image != null) image.ThrowIfDisposed();
- if (charucoCorners != null) charucoCorners.ThrowIfDisposed();
- if (charucoIds != null) charucoIds.ThrowIfDisposed();
- objdetect_Objdetect_drawDetectedCornersCharuco_10(image.nativeObj, charucoCorners.nativeObj, charucoIds.nativeObj, cornerColor.val[0], cornerColor.val[1], cornerColor.val[2], cornerColor.val[3]);
- }
- /**
- * Draws a set of Charuco corners
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param charucoCorners vector of detected charuco corners
- * param charucoIds list of identifiers for each corner in charucoCorners
- *
- * This function draws a set of detected Charuco corners. If identifiers vector is provided, it also
- * draws the id of each corner.
- */
- public static void drawDetectedCornersCharuco(Mat image, Mat charucoCorners, Mat charucoIds)
- {
- if (image != null) image.ThrowIfDisposed();
- if (charucoCorners != null) charucoCorners.ThrowIfDisposed();
- if (charucoIds != null) charucoIds.ThrowIfDisposed();
- objdetect_Objdetect_drawDetectedCornersCharuco_11(image.nativeObj, charucoCorners.nativeObj, charucoIds.nativeObj);
- }
- /**
- * Draws a set of Charuco corners
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param charucoCorners vector of detected charuco corners
- *
- * This function draws a set of detected Charuco corners. If identifiers vector is provided, it also
- * draws the id of each corner.
- */
- public static void drawDetectedCornersCharuco(Mat image, Mat charucoCorners)
- {
- if (image != null) image.ThrowIfDisposed();
- if (charucoCorners != null) charucoCorners.ThrowIfDisposed();
- objdetect_Objdetect_drawDetectedCornersCharuco_12(image.nativeObj, charucoCorners.nativeObj);
- }
- //
- // C++: void cv::aruco::drawDetectedDiamonds(Mat& image, vector_Mat diamondCorners, Mat diamondIds = Mat(), Scalar borderColor = Scalar(0, 0, 255))
- //
- /**
- * Draw a set of detected ChArUco Diamond markers
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param diamondCorners positions of diamond corners in the same format returned by
- * detectCharucoDiamond(). (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
- * the dimensions of this array should be Nx4. The order of the corners should be clockwise.
- * param diamondIds vector of identifiers for diamonds in diamondCorners, in the same format
- * returned by detectCharucoDiamond() (e.g. std::vector<Vec4i>).
- * Optional, if not provided, ids are not painted.
- * param borderColor color of marker borders. Rest of colors (text color and first corner color)
- * are calculated based on this one.
- *
- * Given an array of detected diamonds, this functions draws them in the image. The marker borders
- * are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedDiamonds(Mat image, List<Mat> diamondCorners, Mat diamondIds, Scalar borderColor)
- {
- if (image != null) image.ThrowIfDisposed();
- if (diamondIds != null) diamondIds.ThrowIfDisposed();
- Mat diamondCorners_mat = Converters.vector_Mat_to_Mat(diamondCorners);
- objdetect_Objdetect_drawDetectedDiamonds_10(image.nativeObj, diamondCorners_mat.nativeObj, diamondIds.nativeObj, borderColor.val[0], borderColor.val[1], borderColor.val[2], borderColor.val[3]);
- }
- /**
- * Draw a set of detected ChArUco Diamond markers
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param diamondCorners positions of diamond corners in the same format returned by
- * detectCharucoDiamond(). (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
- * the dimensions of this array should be Nx4. The order of the corners should be clockwise.
- * param diamondIds vector of identifiers for diamonds in diamondCorners, in the same format
- * returned by detectCharucoDiamond() (e.g. std::vector<Vec4i>).
- * Optional, if not provided, ids are not painted.
- * are calculated based on this one.
- *
- * Given an array of detected diamonds, this functions draws them in the image. The marker borders
- * are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedDiamonds(Mat image, List<Mat> diamondCorners, Mat diamondIds)
- {
- if (image != null) image.ThrowIfDisposed();
- if (diamondIds != null) diamondIds.ThrowIfDisposed();
- Mat diamondCorners_mat = Converters.vector_Mat_to_Mat(diamondCorners);
- objdetect_Objdetect_drawDetectedDiamonds_11(image.nativeObj, diamondCorners_mat.nativeObj, diamondIds.nativeObj);
- }
- /**
- * Draw a set of detected ChArUco Diamond markers
- *
- * param image input/output image. It must have 1 or 3 channels. The number of channels is not
- * altered.
- * param diamondCorners positions of diamond corners in the same format returned by
- * detectCharucoDiamond(). (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
- * the dimensions of this array should be Nx4. The order of the corners should be clockwise.
- * returned by detectCharucoDiamond() (e.g. std::vector<Vec4i>).
- * Optional, if not provided, ids are not painted.
- * are calculated based on this one.
- *
- * Given an array of detected diamonds, this functions draws them in the image. The marker borders
- * are painted and the markers identifiers if provided.
- * Useful for debugging purposes.
- */
- public static void drawDetectedDiamonds(Mat image, List<Mat> diamondCorners)
- {
- if (image != null) image.ThrowIfDisposed();
- Mat diamondCorners_mat = Converters.vector_Mat_to_Mat(diamondCorners);
- objdetect_Objdetect_drawDetectedDiamonds_12(image.nativeObj, diamondCorners_mat.nativeObj);
- }
- #if (UNITY_IOS || UNITY_WEBGL) && !UNITY_EDITOR
- const string LIBNAME = "__Internal";
- #else
- const string LIBNAME = "opencvforunity";
- #endif
- // C++: void cv::groupRectangles(vector_Rect& rectList, vector_int& weights, int groupThreshold, double eps = 0.2)
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_groupRectangles_10(IntPtr rectList_mat_nativeObj, IntPtr weights_mat_nativeObj, int groupThreshold, double eps);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_groupRectangles_11(IntPtr rectList_mat_nativeObj, IntPtr weights_mat_nativeObj, int groupThreshold);
- // C++: void cv::aruco::drawDetectedMarkers(Mat& image, vector_Mat corners, Mat ids = Mat(), Scalar borderColor = Scalar(0, 255, 0))
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedMarkers_10(IntPtr image_nativeObj, IntPtr corners_mat_nativeObj, IntPtr ids_nativeObj, double borderColor_val0, double borderColor_val1, double borderColor_val2, double borderColor_val3);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedMarkers_11(IntPtr image_nativeObj, IntPtr corners_mat_nativeObj, IntPtr ids_nativeObj);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedMarkers_12(IntPtr image_nativeObj, IntPtr corners_mat_nativeObj);
- // C++: void cv::aruco::generateImageMarker(Dictionary dictionary, int id, int sidePixels, Mat& img, int borderBits = 1)
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_generateImageMarker_10(IntPtr dictionary_nativeObj, int id, int sidePixels, IntPtr img_nativeObj, int borderBits);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_generateImageMarker_11(IntPtr dictionary_nativeObj, int id, int sidePixels, IntPtr img_nativeObj);
- // C++: Dictionary cv::aruco::getPredefinedDictionary(int dict)
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_Objdetect_getPredefinedDictionary_10(int dict);
- // C++: Dictionary cv::aruco::extendDictionary(int nMarkers, int markerSize, Dictionary baseDictionary = Dictionary(), int randomSeed = 0)
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_Objdetect_extendDictionary_10(int nMarkers, int markerSize, IntPtr baseDictionary_nativeObj, int randomSeed);
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_Objdetect_extendDictionary_11(int nMarkers, int markerSize, IntPtr baseDictionary_nativeObj);
- [DllImport(LIBNAME)]
- private static extern IntPtr objdetect_Objdetect_extendDictionary_12(int nMarkers, int markerSize);
- // C++: void cv::aruco::drawDetectedCornersCharuco(Mat& image, Mat charucoCorners, Mat charucoIds = Mat(), Scalar cornerColor = Scalar(255, 0, 0))
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedCornersCharuco_10(IntPtr image_nativeObj, IntPtr charucoCorners_nativeObj, IntPtr charucoIds_nativeObj, double cornerColor_val0, double cornerColor_val1, double cornerColor_val2, double cornerColor_val3);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedCornersCharuco_11(IntPtr image_nativeObj, IntPtr charucoCorners_nativeObj, IntPtr charucoIds_nativeObj);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedCornersCharuco_12(IntPtr image_nativeObj, IntPtr charucoCorners_nativeObj);
- // C++: void cv::aruco::drawDetectedDiamonds(Mat& image, vector_Mat diamondCorners, Mat diamondIds = Mat(), Scalar borderColor = Scalar(0, 0, 255))
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedDiamonds_10(IntPtr image_nativeObj, IntPtr diamondCorners_mat_nativeObj, IntPtr diamondIds_nativeObj, double borderColor_val0, double borderColor_val1, double borderColor_val2, double borderColor_val3);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedDiamonds_11(IntPtr image_nativeObj, IntPtr diamondCorners_mat_nativeObj, IntPtr diamondIds_nativeObj);
- [DllImport(LIBNAME)]
- private static extern void objdetect_Objdetect_drawDetectedDiamonds_12(IntPtr image_nativeObj, IntPtr diamondCorners_mat_nativeObj);
- }
- }
|