001//
002// This file is auto-generated. Please don't modify it!
003//
004package org.opencv.objdetect;
005
006import java.util.ArrayList;
007import java.util.List;
008import org.opencv.core.Algorithm;
009import org.opencv.core.Mat;
010import org.opencv.objdetect.Board;
011import org.opencv.objdetect.DetectorParameters;
012import org.opencv.objdetect.Dictionary;
013import org.opencv.objdetect.RefineParameters;
014import org.opencv.utils.Converters;
015
016// C++: class ArucoDetector
017/**
018 * The main functionality of ArucoDetector class is detection of markers in an image with detectMarkers() method.
019 *
020 * After detecting some markers in the image, you can try to find undetected markers from this dictionary with
021 * refineDetectedMarkers() method.
022 *
023 * SEE: DetectorParameters, RefineParameters
024 */
025public class ArucoDetector extends Algorithm {
026
027    protected ArucoDetector(long addr) { super(addr); }
028
029    // internal usage only
030    public static ArucoDetector __fromPtr__(long addr) { return new ArucoDetector(addr); }
031
032    //
033    // C++:   cv::aruco::ArucoDetector::ArucoDetector(Dictionary dictionary = getPredefinedDictionary(cv::aruco::DICT_4X4_50), DetectorParameters detectorParams = DetectorParameters(), RefineParameters refineParams = RefineParameters())
034    //
035
036    /**
037     * Basic ArucoDetector constructor
038     *
039     * @param dictionary indicates the type of markers that will be searched
040     * @param detectorParams marker detection parameters
041     * @param refineParams marker refine detection parameters
042     */
043    public ArucoDetector(Dictionary dictionary, DetectorParameters detectorParams, RefineParameters refineParams) {
044        super(ArucoDetector_0(dictionary.nativeObj, detectorParams.nativeObj, refineParams.nativeObj));
045    }
046
047    /**
048     * Basic ArucoDetector constructor
049     *
050     * @param dictionary indicates the type of markers that will be searched
051     * @param detectorParams marker detection parameters
052     */
053    public ArucoDetector(Dictionary dictionary, DetectorParameters detectorParams) {
054        super(ArucoDetector_1(dictionary.nativeObj, detectorParams.nativeObj));
055    }
056
057    /**
058     * Basic ArucoDetector constructor
059     *
060     * @param dictionary indicates the type of markers that will be searched
061     */
062    public ArucoDetector(Dictionary dictionary) {
063        super(ArucoDetector_2(dictionary.nativeObj));
064    }
065
066    /**
067     * Basic ArucoDetector constructor
068     *
069     */
070    public ArucoDetector() {
071        super(ArucoDetector_3());
072    }
073
074
075    //
076    // C++:  void cv::aruco::ArucoDetector::detectMarkers(Mat image, vector_Mat& corners, Mat& ids, vector_Mat& rejectedImgPoints = vector_Mat())
077    //
078
079    /**
080     * Basic marker detection
081     *
082     * @param image input image
083     * @param corners vector of detected marker corners. For each marker, its four corners
084     * are provided, (e.g std::vector<std::vector<cv::Point2f> > ). For N detected markers,
085     * the dimensions of this array is Nx4. The order of the corners is clockwise.
086     * @param ids vector of identifiers of the detected markers. The identifier is of type int
087     * (e.g. std::vector<int>). For N detected markers, the size of ids is also N.
088     * The identifiers have the same order than the markers in the imgPoints array.
089     * @param rejectedImgPoints contains the imgPoints of those squares whose inner code has not a
090     * correct codification. Useful for debugging purposes.
091     *
092     * Performs marker detection in the input image. Only markers included in the specific dictionary
093     * are searched. For each detected marker, it returns the 2D position of its corner in the image
094     * and its corresponding identifier.
095     * Note that this function does not perform pose estimation.
096     * <b>Note:</b> The function does not correct lens distortion or takes it into account. It's recommended to undistort
097     * input image with corresponding camera model, if camera parameters are known
098     * SEE: undistort, estimatePoseSingleMarkers,  estimatePoseBoard
099     */
100    public void detectMarkers(Mat image, List<Mat> corners, Mat ids, List<Mat> rejectedImgPoints) {
101        Mat corners_mat = new Mat();
102        Mat rejectedImgPoints_mat = new Mat();
103        detectMarkers_0(nativeObj, image.nativeObj, corners_mat.nativeObj, ids.nativeObj, rejectedImgPoints_mat.nativeObj);
104        Converters.Mat_to_vector_Mat(corners_mat, corners);
105        corners_mat.release();
106        Converters.Mat_to_vector_Mat(rejectedImgPoints_mat, rejectedImgPoints);
107        rejectedImgPoints_mat.release();
108    }
109
110    /**
111     * Basic marker detection
112     *
113     * @param image input image
114     * @param corners vector of detected marker corners. For each marker, its four corners
115     * are provided, (e.g std::vector&lt;std::vector&lt;cv::Point2f&gt; &gt; ). For N detected markers,
116     * the dimensions of this array is Nx4. The order of the corners is clockwise.
117     * @param ids vector of identifiers of the detected markers. The identifier is of type int
118     * (e.g. std::vector&lt;int&gt;). For N detected markers, the size of ids is also N.
119     * The identifiers have the same order than the markers in the imgPoints array.
120     * correct codification. Useful for debugging purposes.
121     *
122     * Performs marker detection in the input image. Only markers included in the specific dictionary
123     * are searched. For each detected marker, it returns the 2D position of its corner in the image
124     * and its corresponding identifier.
125     * Note that this function does not perform pose estimation.
126     * <b>Note:</b> The function does not correct lens distortion or takes it into account. It's recommended to undistort
127     * input image with corresponding camera model, if camera parameters are known
128     * SEE: undistort, estimatePoseSingleMarkers,  estimatePoseBoard
129     */
130    public void detectMarkers(Mat image, List<Mat> corners, Mat ids) {
131        Mat corners_mat = new Mat();
132        detectMarkers_1(nativeObj, image.nativeObj, corners_mat.nativeObj, ids.nativeObj);
133        Converters.Mat_to_vector_Mat(corners_mat, corners);
134        corners_mat.release();
135    }
136
137
138    //
139    // C++:  void cv::aruco::ArucoDetector::refineDetectedMarkers(Mat image, Board board, vector_Mat& detectedCorners, Mat& detectedIds, vector_Mat& rejectedCorners, Mat cameraMatrix = Mat(), Mat distCoeffs = Mat(), Mat& recoveredIdxs = Mat())
140    //
141
142    /**
143     * Refine not detected markers based on the already detected and the board layout
144     *
145     * @param image input image
146     * @param board layout of markers in the board.
147     * @param detectedCorners vector of already detected marker corners.
148     * @param detectedIds vector of already detected marker identifiers.
149     * @param rejectedCorners vector of rejected candidates during the marker detection process.
150     * @param cameraMatrix optional input 3x3 floating-point camera matrix
151     * \(A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)
152     * @param distCoeffs optional vector of distortion coefficients
153     * \((k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\) of 4, 5, 8 or 12 elements
154     * @param recoveredIdxs Optional array to returns the indexes of the recovered candidates in the
155     * original rejectedCorners array.
156     *
157     * This function tries to find markers that were not detected in the basic detecMarkers function.
158     * First, based on the current detected marker and the board layout, the function interpolates
159     * the position of the missing markers. Then it tries to find correspondence between the reprojected
160     * markers and the rejected candidates based on the minRepDistance and errorCorrectionRate parameters.
161     * If camera parameters and distortion coefficients are provided, missing markers are reprojected
162     * using projectPoint function. If not, missing marker projections are interpolated using global
163     * homography, and all the marker corners in the board must have the same Z coordinate.
164     */
165    public void refineDetectedMarkers(Mat image, Board board, List<Mat> detectedCorners, Mat detectedIds, List<Mat> rejectedCorners, Mat cameraMatrix, Mat distCoeffs, Mat recoveredIdxs) {
166        Mat detectedCorners_mat = Converters.vector_Mat_to_Mat(detectedCorners);
167        Mat rejectedCorners_mat = Converters.vector_Mat_to_Mat(rejectedCorners);
168        refineDetectedMarkers_0(nativeObj, image.nativeObj, board.nativeObj, detectedCorners_mat.nativeObj, detectedIds.nativeObj, rejectedCorners_mat.nativeObj, cameraMatrix.nativeObj, distCoeffs.nativeObj, recoveredIdxs.nativeObj);
169        Converters.Mat_to_vector_Mat(detectedCorners_mat, detectedCorners);
170        detectedCorners_mat.release();
171        Converters.Mat_to_vector_Mat(rejectedCorners_mat, rejectedCorners);
172        rejectedCorners_mat.release();
173    }
174
175    /**
176     * Refine not detected markers based on the already detected and the board layout
177     *
178     * @param image input image
179     * @param board layout of markers in the board.
180     * @param detectedCorners vector of already detected marker corners.
181     * @param detectedIds vector of already detected marker identifiers.
182     * @param rejectedCorners vector of rejected candidates during the marker detection process.
183     * @param cameraMatrix optional input 3x3 floating-point camera matrix
184     * \(A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)
185     * @param distCoeffs optional vector of distortion coefficients
186     * \((k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\) of 4, 5, 8 or 12 elements
187     * original rejectedCorners array.
188     *
189     * This function tries to find markers that were not detected in the basic detecMarkers function.
190     * First, based on the current detected marker and the board layout, the function interpolates
191     * the position of the missing markers. Then it tries to find correspondence between the reprojected
192     * markers and the rejected candidates based on the minRepDistance and errorCorrectionRate parameters.
193     * If camera parameters and distortion coefficients are provided, missing markers are reprojected
194     * using projectPoint function. If not, missing marker projections are interpolated using global
195     * homography, and all the marker corners in the board must have the same Z coordinate.
196     */
197    public void refineDetectedMarkers(Mat image, Board board, List<Mat> detectedCorners, Mat detectedIds, List<Mat> rejectedCorners, Mat cameraMatrix, Mat distCoeffs) {
198        Mat detectedCorners_mat = Converters.vector_Mat_to_Mat(detectedCorners);
199        Mat rejectedCorners_mat = Converters.vector_Mat_to_Mat(rejectedCorners);
200        refineDetectedMarkers_1(nativeObj, image.nativeObj, board.nativeObj, detectedCorners_mat.nativeObj, detectedIds.nativeObj, rejectedCorners_mat.nativeObj, cameraMatrix.nativeObj, distCoeffs.nativeObj);
201        Converters.Mat_to_vector_Mat(detectedCorners_mat, detectedCorners);
202        detectedCorners_mat.release();
203        Converters.Mat_to_vector_Mat(rejectedCorners_mat, rejectedCorners);
204        rejectedCorners_mat.release();
205    }
206
207    /**
208     * Refine not detected markers based on the already detected and the board layout
209     *
210     * @param image input image
211     * @param board layout of markers in the board.
212     * @param detectedCorners vector of already detected marker corners.
213     * @param detectedIds vector of already detected marker identifiers.
214     * @param rejectedCorners vector of rejected candidates during the marker detection process.
215     * @param cameraMatrix optional input 3x3 floating-point camera matrix
216     * \(A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)
217     * \((k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\) of 4, 5, 8 or 12 elements
218     * original rejectedCorners array.
219     *
220     * This function tries to find markers that were not detected in the basic detecMarkers function.
221     * First, based on the current detected marker and the board layout, the function interpolates
222     * the position of the missing markers. Then it tries to find correspondence between the reprojected
223     * markers and the rejected candidates based on the minRepDistance and errorCorrectionRate parameters.
224     * If camera parameters and distortion coefficients are provided, missing markers are reprojected
225     * using projectPoint function. If not, missing marker projections are interpolated using global
226     * homography, and all the marker corners in the board must have the same Z coordinate.
227     */
228    public void refineDetectedMarkers(Mat image, Board board, List<Mat> detectedCorners, Mat detectedIds, List<Mat> rejectedCorners, Mat cameraMatrix) {
229        Mat detectedCorners_mat = Converters.vector_Mat_to_Mat(detectedCorners);
230        Mat rejectedCorners_mat = Converters.vector_Mat_to_Mat(rejectedCorners);
231        refineDetectedMarkers_2(nativeObj, image.nativeObj, board.nativeObj, detectedCorners_mat.nativeObj, detectedIds.nativeObj, rejectedCorners_mat.nativeObj, cameraMatrix.nativeObj);
232        Converters.Mat_to_vector_Mat(detectedCorners_mat, detectedCorners);
233        detectedCorners_mat.release();
234        Converters.Mat_to_vector_Mat(rejectedCorners_mat, rejectedCorners);
235        rejectedCorners_mat.release();
236    }
237
238    /**
239     * Refine not detected markers based on the already detected and the board layout
240     *
241     * @param image input image
242     * @param board layout of markers in the board.
243     * @param detectedCorners vector of already detected marker corners.
244     * @param detectedIds vector of already detected marker identifiers.
245     * @param rejectedCorners vector of rejected candidates during the marker detection process.
246     * \(A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}\)
247     * \((k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6],[s_1, s_2, s_3, s_4]])\) of 4, 5, 8 or 12 elements
248     * original rejectedCorners array.
249     *
250     * This function tries to find markers that were not detected in the basic detecMarkers function.
251     * First, based on the current detected marker and the board layout, the function interpolates
252     * the position of the missing markers. Then it tries to find correspondence between the reprojected
253     * markers and the rejected candidates based on the minRepDistance and errorCorrectionRate parameters.
254     * If camera parameters and distortion coefficients are provided, missing markers are reprojected
255     * using projectPoint function. If not, missing marker projections are interpolated using global
256     * homography, and all the marker corners in the board must have the same Z coordinate.
257     */
258    public void refineDetectedMarkers(Mat image, Board board, List<Mat> detectedCorners, Mat detectedIds, List<Mat> rejectedCorners) {
259        Mat detectedCorners_mat = Converters.vector_Mat_to_Mat(detectedCorners);
260        Mat rejectedCorners_mat = Converters.vector_Mat_to_Mat(rejectedCorners);
261        refineDetectedMarkers_3(nativeObj, image.nativeObj, board.nativeObj, detectedCorners_mat.nativeObj, detectedIds.nativeObj, rejectedCorners_mat.nativeObj);
262        Converters.Mat_to_vector_Mat(detectedCorners_mat, detectedCorners);
263        detectedCorners_mat.release();
264        Converters.Mat_to_vector_Mat(rejectedCorners_mat, rejectedCorners);
265        rejectedCorners_mat.release();
266    }
267
268
269    //
270    // C++:  Dictionary cv::aruco::ArucoDetector::getDictionary()
271    //
272
273    public Dictionary getDictionary() {
274        return new Dictionary(getDictionary_0(nativeObj));
275    }
276
277
278    //
279    // C++:  void cv::aruco::ArucoDetector::setDictionary(Dictionary dictionary)
280    //
281
282    public void setDictionary(Dictionary dictionary) {
283        setDictionary_0(nativeObj, dictionary.nativeObj);
284    }
285
286
287    //
288    // C++:  DetectorParameters cv::aruco::ArucoDetector::getDetectorParameters()
289    //
290
291    public DetectorParameters getDetectorParameters() {
292        return new DetectorParameters(getDetectorParameters_0(nativeObj));
293    }
294
295
296    //
297    // C++:  void cv::aruco::ArucoDetector::setDetectorParameters(DetectorParameters detectorParameters)
298    //
299
300    public void setDetectorParameters(DetectorParameters detectorParameters) {
301        setDetectorParameters_0(nativeObj, detectorParameters.nativeObj);
302    }
303
304
305    //
306    // C++:  RefineParameters cv::aruco::ArucoDetector::getRefineParameters()
307    //
308
309    public RefineParameters getRefineParameters() {
310        return new RefineParameters(getRefineParameters_0(nativeObj));
311    }
312
313
314    //
315    // C++:  void cv::aruco::ArucoDetector::setRefineParameters(RefineParameters refineParameters)
316    //
317
318    public void setRefineParameters(RefineParameters refineParameters) {
319        setRefineParameters_0(nativeObj, refineParameters.nativeObj);
320    }
321
322
323    //
324    // C++:  void cv::aruco::ArucoDetector::write(FileStorage fs, String name)
325    //
326
327    // Unknown type 'FileStorage' (I), skipping the function
328
329
330    //
331    // C++:  void cv::aruco::ArucoDetector::read(FileNode fn)
332    //
333
334    // Unknown type 'FileNode' (I), skipping the function
335
336
337    @Override
338    protected void finalize() throws Throwable {
339        delete(nativeObj);
340    }
341
342
343
344    // C++:   cv::aruco::ArucoDetector::ArucoDetector(Dictionary dictionary = getPredefinedDictionary(cv::aruco::DICT_4X4_50), DetectorParameters detectorParams = DetectorParameters(), RefineParameters refineParams = RefineParameters())
345    private static native long ArucoDetector_0(long dictionary_nativeObj, long detectorParams_nativeObj, long refineParams_nativeObj);
346    private static native long ArucoDetector_1(long dictionary_nativeObj, long detectorParams_nativeObj);
347    private static native long ArucoDetector_2(long dictionary_nativeObj);
348    private static native long ArucoDetector_3();
349
350    // C++:  void cv::aruco::ArucoDetector::detectMarkers(Mat image, vector_Mat& corners, Mat& ids, vector_Mat& rejectedImgPoints = vector_Mat())
351    private static native void detectMarkers_0(long nativeObj, long image_nativeObj, long corners_mat_nativeObj, long ids_nativeObj, long rejectedImgPoints_mat_nativeObj);
352    private static native void detectMarkers_1(long nativeObj, long image_nativeObj, long corners_mat_nativeObj, long ids_nativeObj);
353
354    // C++:  void cv::aruco::ArucoDetector::refineDetectedMarkers(Mat image, Board board, vector_Mat& detectedCorners, Mat& detectedIds, vector_Mat& rejectedCorners, Mat cameraMatrix = Mat(), Mat distCoeffs = Mat(), Mat& recoveredIdxs = Mat())
355    private static native void refineDetectedMarkers_0(long nativeObj, long image_nativeObj, long board_nativeObj, long detectedCorners_mat_nativeObj, long detectedIds_nativeObj, long rejectedCorners_mat_nativeObj, long cameraMatrix_nativeObj, long distCoeffs_nativeObj, long recoveredIdxs_nativeObj);
356    private static native void refineDetectedMarkers_1(long nativeObj, long image_nativeObj, long board_nativeObj, long detectedCorners_mat_nativeObj, long detectedIds_nativeObj, long rejectedCorners_mat_nativeObj, long cameraMatrix_nativeObj, long distCoeffs_nativeObj);
357    private static native void refineDetectedMarkers_2(long nativeObj, long image_nativeObj, long board_nativeObj, long detectedCorners_mat_nativeObj, long detectedIds_nativeObj, long rejectedCorners_mat_nativeObj, long cameraMatrix_nativeObj);
358    private static native void refineDetectedMarkers_3(long nativeObj, long image_nativeObj, long board_nativeObj, long detectedCorners_mat_nativeObj, long detectedIds_nativeObj, long rejectedCorners_mat_nativeObj);
359
360    // C++:  Dictionary cv::aruco::ArucoDetector::getDictionary()
361    private static native long getDictionary_0(long nativeObj);
362
363    // C++:  void cv::aruco::ArucoDetector::setDictionary(Dictionary dictionary)
364    private static native void setDictionary_0(long nativeObj, long dictionary_nativeObj);
365
366    // C++:  DetectorParameters cv::aruco::ArucoDetector::getDetectorParameters()
367    private static native long getDetectorParameters_0(long nativeObj);
368
369    // C++:  void cv::aruco::ArucoDetector::setDetectorParameters(DetectorParameters detectorParameters)
370    private static native void setDetectorParameters_0(long nativeObj, long detectorParameters_nativeObj);
371
372    // C++:  RefineParameters cv::aruco::ArucoDetector::getRefineParameters()
373    private static native long getRefineParameters_0(long nativeObj);
374
375    // C++:  void cv::aruco::ArucoDetector::setRefineParameters(RefineParameters refineParameters)
376    private static native void setRefineParameters_0(long nativeObj, long refineParameters_nativeObj);
377
378    // native support for java finalize()
379    private static native void delete(long nativeObj);
380
381}