You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
5.1 KiB

  1. //----------------------------------------------------------------------------
  2. //
  3. // Copyright (C) 2004-2025 by EMGU Corporation. All rights reserved.
  4. //
  5. //----------------------------------------------------------------------------
  6. #include "objdetect_c.h"
  7. cv::QRCodeDetector* cveQRCodeDetectorCreate(cv::GraphicalCodeDetector** graphicalCodeDetector)
  8. {
  9. #ifdef HAVE_OPENCV_OBJDETECT
  10. cv::QRCodeDetector* result = new cv::QRCodeDetector();
  11. *graphicalCodeDetector = static_cast<cv::GraphicalCodeDetector*>(result);
  12. return result;
  13. #else
  14. throw_no_objdetect();
  15. #endif
  16. }
  17. void cveQRCodeDetectorRelease(cv::QRCodeDetector** detector)
  18. {
  19. #ifdef HAVE_OPENCV_OBJDETECT
  20. delete *detector;
  21. *detector = 0;
  22. #else
  23. throw_no_objdetect();
  24. #endif
  25. }
  26. void cveQRCodeDetectorDecodeCurved(cv::QRCodeDetector* detector, cv::_InputArray* img, cv::_InputArray* points, cv::String* decodedInfo, cv::_OutputArray* straightQrcode)
  27. {
  28. #ifdef HAVE_OPENCV_OBJDETECT
  29. std::string s = detector->decodeCurved(*img, *points, straightQrcode ? *straightQrcode : static_cast<cv::OutputArray>(cv::noArray()));
  30. *decodedInfo = s;
  31. #else
  32. throw_no_objdetect();
  33. #endif
  34. }
  35. int cveQRCodeDetectorGetEncoding(cv::QRCodeDetector* detector, int codeIdx)
  36. {
  37. #ifdef HAVE_OPENCV_OBJDETECT
  38. return detector->getEncoding(codeIdx);
  39. #else
  40. throw_no_objdetect();
  41. #endif
  42. }
  43. cv::QRCodeDetectorAruco* cveQRCodeDetectorArucoCreate(cv::GraphicalCodeDetector** graphicalCodeDetector)
  44. {
  45. #ifdef HAVE_OPENCV_OBJDETECT
  46. cv::QRCodeDetectorAruco* result = new cv::QRCodeDetectorAruco();
  47. *graphicalCodeDetector = static_cast<cv::GraphicalCodeDetector*>(result);
  48. return result;
  49. #else
  50. throw_no_objdetect();
  51. #endif
  52. }
  53. void cveQRCodeDetectorArucoRelease(cv::QRCodeDetectorAruco** detector)
  54. {
  55. #ifdef HAVE_OPENCV_OBJDETECT
  56. delete* detector;
  57. *detector = 0;
  58. #else
  59. throw_no_objdetect();
  60. #endif
  61. }
  62. cv::QRCodeEncoder* cveQRCodeEncoderCreate(
  63. cv::Ptr<cv::QRCodeEncoder>** sharedPtr,
  64. int version,
  65. int correctionLevel,
  66. int mode,
  67. int structureNumber)
  68. {
  69. #ifdef HAVE_OPENCV_OBJDETECT
  70. cv::QRCodeEncoder::Params p;
  71. p.version = version;
  72. p.correction_level = static_cast<cv::QRCodeEncoder::CorrectionLevel>(correctionLevel);
  73. p.mode = static_cast<cv::QRCodeEncoder::EncodeMode>(mode);
  74. p.structure_number = structureNumber;
  75. cv::Ptr<cv::QRCodeEncoder> ptr = cv::QRCodeEncoder::create();
  76. *sharedPtr = new cv::Ptr<cv::QRCodeEncoder>(ptr);
  77. return ptr.get();
  78. #else
  79. throw_no_objdetect();
  80. #endif
  81. }
  82. void cveQRCodeEncoderRelease(cv::QRCodeEncoder** encoder, cv::Ptr<cv::QRCodeEncoder>** sharedPtr)
  83. {
  84. #ifdef HAVE_OPENCV_OBJDETECT
  85. delete* sharedPtr;
  86. *encoder = 0;
  87. *sharedPtr = 0;
  88. #else
  89. throw_no_objdetect();
  90. #endif
  91. }
  92. void cveQRCodeEncoderEncode(cv::QRCodeEncoder* encoder, cv::String* encodedInfo, cv::_OutputArray* qrcode)
  93. {
  94. #ifdef HAVE_OPENCV_OBJDETECT
  95. encoder->encode(*encodedInfo, *qrcode);
  96. #else
  97. throw_no_objdetect();
  98. #endif
  99. }
  100. cv::barcode::BarcodeDetector* cveBarcodeDetectorCreate(
  101. cv::String* prototxtPath,
  102. cv::String* modelPath,
  103. cv::GraphicalCodeDetector** graphicalCodeDetector)
  104. {
  105. #ifdef HAVE_OPENCV_OBJDETECT
  106. cv::barcode::BarcodeDetector* result = new cv::barcode::BarcodeDetector(
  107. *prototxtPath,
  108. *modelPath);
  109. *graphicalCodeDetector = static_cast<cv::GraphicalCodeDetector*>(result);
  110. return result;
  111. #else
  112. throw_no_objdetect();
  113. #endif
  114. }
  115. void cveBarcodeDetectorRelease(cv::barcode::BarcodeDetector** detector)
  116. {
  117. #ifdef HAVE_OPENCV_OBJDETECT
  118. delete* detector;
  119. detector = 0;
  120. #else
  121. throw_no_objdetect();
  122. #endif
  123. }
  124. bool cveGraphicalCodeDetectorDetect(cv::GraphicalCodeDetector* detector, cv::_InputArray* img, cv::_OutputArray* points)
  125. {
  126. #ifdef HAVE_OPENCV_OBJDETECT
  127. return detector->detect(*img, *points);
  128. #else
  129. throw_no_objdetect();
  130. #endif
  131. }
  132. bool cveGraphicalCodeDetectorDetectMulti(cv::GraphicalCodeDetector* detector, cv::_InputArray* img, cv::_OutputArray* points)
  133. {
  134. #ifdef HAVE_OPENCV_OBJDETECT
  135. return detector->detectMulti(*img, *points);
  136. #else
  137. throw_no_objdetect();
  138. #endif
  139. }
  140. void cveGraphicalCodeDetectorDecode(cv::GraphicalCodeDetector* detector, cv::_InputArray* img, cv::_InputArray* points, cv::_OutputArray* straightCode, cv::String* output)
  141. {
  142. #ifdef HAVE_OPENCV_OBJDETECT
  143. *output = detector->decode(*img, *points, straightCode ? *straightCode : static_cast<cv::OutputArray>(cv::noArray()));
  144. #else
  145. throw_no_objdetect();
  146. #endif
  147. }
  148. bool cveGraphicalCodeDetectorDecodeMulti(
  149. cv::GraphicalCodeDetector* detector,
  150. cv::_InputArray* img,
  151. cv::_InputArray* points,
  152. std::vector< std::string >* decodedInfo,
  153. cv::_OutputArray* straightCode)
  154. {
  155. #ifdef HAVE_OPENCV_OBJDETECT
  156. return detector->decodeMulti(
  157. *img,
  158. *points,
  159. *decodedInfo,
  160. straightCode ? *straightCode : static_cast<cv::OutputArray>(cv::noArray())
  161. );
  162. #else
  163. throw_no_objdetect();
  164. #endif
  165. }
  166. bool cveGraphicalCodeDetectorDetectAndDecodeMulti(
  167. cv::GraphicalCodeDetector* detector,
  168. cv::_InputArray* img,
  169. std::vector< std::string >* decodedInfo,
  170. cv::_OutputArray* points,
  171. cv::_OutputArray* straightCode)
  172. {
  173. #ifdef HAVE_OPENCV_OBJDETECT
  174. return detector->detectAndDecodeMulti(
  175. *img,
  176. *decodedInfo,
  177. *points,
  178. straightCode ? *straightCode : static_cast<cv::OutputArray>(cv::noArray())
  179. );
  180. #else
  181. throw_no_objdetect();
  182. #endif
  183. }