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<std::vector<cv::Point2f> > ). 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<int>). 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}