nareshmlx/opencv-pr huggingface dataset:
**File:** modules/core/include/opencv2/core/cuda.hpp
**Change Type:** modified
**Context:** PR #23371: `cuda`: Add bindings to allow `GpuMat` and `Stream` objects to be initialized from memory initialized in other libraries

**Code Changes:**
```diff
@@ -567,6 +567,29 @@ The function does not reallocate memory if the matrix has proper attributes alre
  */
 CV_EXPORTS_W void ensureSizeIsEnough(int rows, int cols, int type, OutputArray arr);
 
+/** @brief Bindings overload to create a GpuMat from existing GPU memory.
+@param rows Row count.
+@param cols Column count.
+@param type Type of the matrix.
+@param cudaMemoryAddress Address of the allocated GPU memory on the device. This does not allocate matrix data. Instead, it just initializes the matrix header that points to the specified \a cudaMemoryAddress, which means that no data is copied. This operation is very efficient and can be used to process external data using OpenCV functions. The external data is not automatically deallocated, so you should take care of it.
+@param step Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. If the parameter is missing (set to Mat::AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize(). See GpuMat::elemSize.
```

Review comment:
Agreed, `size_t` works as well and is better for compatibility.
**File:** samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
**Change Type:** modified
**Context:** PR #23575: add ChArUco board pattern into calib3d/camera_calibration

**Code Changes:**
```diff
@@ -11,6 +11,7 @@
 #include <opencv2/imgcodecs.hpp>
 #include <opencv2/videoio.hpp>
 #include <opencv2/highgui.hpp>
+#include "opencv2/objdetect/charuco_detector.hpp"
 
 using namespace cv;
 using namespace std;
@@ -19,7 +20,7 @@ class Settings
 {
```

Review comment:
`jj` is not used.
**File:** samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
**Change Type:** modified
**Context:** PR #23575: add ChArUco board pattern into calib3d/camera_calibration

**Code Changes:**
```diff
@@ -11,6 +11,7 @@
 #include <opencv2/imgcodecs.hpp>
 #include <opencv2/videoio.hpp>
 #include <opencv2/highgui.hpp>
+#include "opencv2/objdetect/charuco_detector.hpp"
 
 using namespace cv;
 using namespace std;
@@ -19,7 +20,7 @@ class Settings
 {
```

Review comment:
No need to touch formatting here.
**File:** samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
**Change Type:** modified
**Context:** PR #23575: add ChArUco board pattern into calib3d/camera_calibration

**Code Changes:**
```diff
@@ -11,6 +11,7 @@
 #include <opencv2/imgcodecs.hpp>
 #include <opencv2/videoio.hpp>
 #include <opencv2/highgui.hpp>
+#include "opencv2/objdetect/charuco_detector.hpp"
 
 using namespace cv;
 using namespace std;
@@ -19,7 +20,7 @@ class Settings
 {
```

Review comment:
Please use {} for outer loop too.
**File:** samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
**Change Type:** modified
**Context:** PR #23575: add ChArUco board pattern into calib3d/camera_calibration

**Code Changes:**
```diff
@@ -11,6 +11,7 @@
 #include <opencv2/imgcodecs.hpp>
 #include <opencv2/videoio.hpp>
 #include <opencv2/highgui.hpp>
+#include "opencv2/objdetect/charuco_detector.hpp"
 
 using namespace cv;
 using namespace std;
@@ -19,7 +20,7 @@ class Settings
 {
```

Review comment:
Please remove dead code and fix formatting.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23612: QRCodeDetector: don't floodFill with outside-of-image seedPoint

**Code Changes:**
```diff
@@ -570,18 +570,19 @@ bool QRDetect::computeTransformationPoints()
     {
         Mat mask = Mat::zeros(bin_barcode.rows + 2, bin_barcode.cols + 2, CV_8UC1);
         uint8_t next_pixel, future_pixel = 255;
-        int count_test_lines = 0, index = cvRound(localization_points[i].x);
-        for (; index < bin_barcode.cols - 1; index++)
+        int count_test_lines = 0, index_c = max(0, min(cvRound(localization_points[i].x), bin_barcode.cols - 1));
+        const int index_r = max(0, min(cvRound(localization_points[i].y), bin_barcode.rows - 1));
+        for (; index_c < bin_barcode.cols - 1; index_c++)
         {
```

Review comment:
`index_r` is not changed in the loop. So it should be checked only once. In case if the value is rounded up, outside of image the loop is not executed at all. I propose to clamp index_r to image size to ensure out-of-bound access and handle corner cases correctly.
**File:** modules/objdetect/src/qrcode.cpp
**Change Type:** modified
**Context:** PR #23612: QRCodeDetector: don't floodFill with outside-of-image seedPoint

**Code Changes:**
```diff
@@ -570,18 +570,19 @@ bool QRDetect::computeTransformationPoints()
     {
         Mat mask = Mat::zeros(bin_barcode.rows + 2, bin_barcode.cols + 2, CV_8UC1);
         uint8_t next_pixel, future_pixel = 255;
-        int count_test_lines = 0, index = cvRound(localization_points[i].x);
-        for (; index < bin_barcode.cols - 1; index++)
+        int count_test_lines = 0, index_c = max(0, min(cvRound(localization_points[i].x), bin_barcode.cols - 1));
+        const int index_r = max(0, min(cvRound(localization_points[i].y), bin_barcode.rows - 1));
+        for (; index_c < bin_barcode.cols - 1; index_c++)
         {
```

Review comment:
also should check negative value of `localization_points`
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
It makes sense to convert code to the following structure: ``` if pattern_type="chessboard": ... elif pattern_type == 'charucoboard': ... else: # print error message here ``` 1. All use cases are obvious. 2. User gets error message, if board is unsupported.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
Please add possible pattern types to the usage hint.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
Not used in code.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
double '-' for single letter keys looks very unusual. I propose to follow common convention: `-w`, `-t`, but `--debug` and `--marker_size`.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py
**Review Line:** 21

**Code Changes:**
```diff
+    -w: 4
+    -h: 6
+    -t: chessboard
+    --square_size: 50
+    --marker_size: 25
+    --aruco_dict: DICT_4X4_50
+    --threads: 4
     <image mask> defaults to ../data/left*.jpg
 '''
 
@@ -30,31 +40,81 @@ def main():
```

Review comment:
I propose to set defaults to the same board that you add to documentation as example.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
In case if you presume chessboard as default selection, then let's presume default width and height. They correspond to sample board image in documentation.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py
**Review Line:** 114

**Code Changes:**
```diff
+    }
+
+    if (aruco_dict_name not in set(aruco_dicts.keys())):
+        print("unknown aruco dictionary name")
+        return None
+    aruco_dict = cv.aruco.getPredefinedDictionary(aruco_dicts[aruco_dict_name])
+    board = cv.aruco.CharucoBoard(pattern_size, square_size, marker_size, aruco_dict)
+    charuco_detector = cv.aruco.CharucoDetector(board)
+
     def processImage(fn):
         print('processing %s... ' % fn)
```

Review comment:
Please add check. that user defiles proper board name. Otherwise he/she gets some exception on dict access.
**File:** samples/python/calibrate.py
**Change Type:** modified
**Context:** PR #23587: added charuco pattern into calibrate.py

**Code Changes:**
```diff
@@ -5,11 +5,21 @@
 reads distorted images, calculates the calibration and write undistorted images
 
 usage:
-    calibrate.py [--debug <output path>] [--square_size] [<image mask>]
+    calibrate.py [--debug <output path>] [-w <width>] [-h <height>] [-t <pattern type>] [--square_size=<square size>]
+    [--marker_size=<aruco marker size>] [--aruco_dict=<aruco dictionary name>] [<image mask>]
+
+usage example:
+    calibrate.py -w 4 -h 6 -t chessboard --square_size=50 ../data/left*.jpg
```

Review comment:
`cornerSubPix` makes sense for chessboard only.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
Dict list should be obvious in the option description.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
Instruction how to use custom dictionary or extend the file is needed.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
The file is not included into the PR.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
If I understand correctly from https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes the stroke adds line around the object and it makes circles and squares larger. I do not think that it's what we want for calibration part of the pattern. For Aruco part it's ok to fill the gaps between pattern elements.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
Please list all available options here, or add reference to documentation, where they are listed.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
The script may be installed to some system location with `make install` or packaging. It makes sense to search it with something like `os.path.abspath(__file__)`.
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
`-p, --aruco_marker_size - aruco markers size for charuco pattern (default 10.0)` Also need to add units (meters, relative size, etc)
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
`d, --aruco_dict name of predefined aruco dictionary for charuco pattern ("default")`
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
`-f, --dict_file - file name of custom aruco dictionary for charuco pattern`
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
for charuco boards only
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
I recommend to use `with .. as..:` notation here and bellow for not compressed files, e.g.: ``` with gzip.open(self.dict_file, 'r') as fin: json_bytes = fin.read() json_str = json_bytes.decode('utf-8') dictionary = json.loads(json_str) ```
**File:** doc/pattern_tools/gen_pattern.py
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -6,24 +6,28 @@
 -o, --output - output file (default out.svg)
 -r, --rows - pattern rows (default 11)
 -c, --columns - pattern columns (default 8)
--T, --type - type of pattern, circles, acircles, checkerboard, radon_checkerboard (default circles)
+-T, --type - type of pattern: circles, acircles, checkerboard, radon_checkerboard, charuco_board. default circles.
 -s, --square_size - size of squares in pattern (default 20.0)
 -R, --radius_rate - circles_radius = square_size/radius_rate (default 5.0)
 -u, --units - mm, inches, px, m (default mm)
 -w, --page_width - page width in units (default 216)
```

Review comment:
See wording above.
**File:** doc/tutorials/calib3d/camera_calibration_pattern/camera_calibration_pattern.markdown
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -17,6 +17,9 @@ You can find a chessboard pattern in https://github.com/opencv/opencv/blob/4.x/d
 
 You can find a circleboard pattern in https://github.com/opencv/opencv/blob/4.x/doc/acircles_pattern.png
 
+You can find a ChAruco board pattern in https://github.com/opencv/opencv/blob/4.x/doc/charuco_board_pattern.png
+(7X5 ChAruco board, square size: 30 mm , marker size: 15 mm, aruco dict: DICT_5X5_100, page width: 210 mm, page height: 297 mm)
+
 Create your own pattern
 ---------------
 
```

Review comment:
Please add the board parameters here: dict, marker, size, etc
**File:** doc/tutorials/calib3d/camera_calibration_pattern/camera_calibration_pattern.markdown
**Change Type:** modified
**Context:** PR #23363: added charuco board generation to gen_pattern.py

**Code Changes:**
```diff
@@ -17,6 +17,9 @@ You can find a chessboard pattern in https://github.com/opencv/opencv/blob/4.x/d
 
 You can find a circleboard pattern in https://github.com/opencv/opencv/blob/4.x/doc/acircles_pattern.png
 
+You can find a ChAruco board pattern in https://github.com/opencv/opencv/blob/4.x/doc/charuco_board_pattern.png
+(7X5 ChAruco board, square size: 30 mm , marker size: 15 mm, aruco dict: DICT_5X5_100, page width: 210 mm, page height: 297 mm)
+
 Create your own pattern
 ---------------
 
```

Review comment:
``` ~/Projects/OpenCV/opencv-master/doc/pattern_tools$ python3.8 gen_pattern.py -o charuco_board.svg --rows 7 --columns 5 --T charuco_checkerboard --square_size 50 --marker_size 30 -f DICT_5X5_100.json usage: gen_pattern.py [-H] [-o OUTPUT] [-c COLUMNS] [-r ROWS] [-T {circles,acircles,checkerboard,radon_checkerboard,charuco_board}] [-u {mm,inches,px,m}] [-s SQUARE_SIZE] [-R RADIUS_RATE] [-w PAGE_WIDTH] [-h PAGE_HEIGHT] [-a {A0,A1,A2,A3,A4,A5}] [-m MARKERS [MARKERS ...]] [-p ARUCO_MARKER_SIZE] [-f DICT_FILE] gen_pattern.py: error: unrecognized arguments: --T charuco_checkerboard --marker_size 30 ```