@@ -1348,50 +1348,55 @@ mp_obj_t cv2_imgproc_HoughLines(size_t n_args, const mp_obj_t *pos_args, mp_map_
1348
1348
return mat_to_mp_obj (lines);
1349
1349
}
1350
1350
1351
- // mp_obj_t cv2_imgproc_HoughLinesP(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
1352
- // // Define the arguments
1353
- // enum { ARG_image, ARG_rho, ARG_theta, ARG_threshold, ARG_lines, ARG_minLineLength, ARG_maxLineGap };
1354
- // static const mp_arg_t allowed_args[] = {
1355
- // { MP_QSTR_image, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = MP_OBJ_NULL } },
1356
- // { MP_QSTR_rho, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = mp_const_none } },
1357
- // { MP_QSTR_theta, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = mp_const_none } },
1358
- // { MP_QSTR_threshold, MP_ARG_REQUIRED | MP_ARG_INT, { .u_int = 100 } },
1359
- // { MP_QSTR_lines, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1360
- // { MP_QSTR_minLineLength, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1361
- // { MP_QSTR_maxLineGap, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1362
- // };
1351
+ mp_obj_t cv2_imgproc_HoughLinesP (size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
1352
+ // Define the arguments
1353
+ enum { ARG_image, ARG_rho, ARG_theta, ARG_threshold, ARG_lines, ARG_minLineLength, ARG_maxLineGap };
1354
+ static const mp_arg_t allowed_args[] = {
1355
+ { MP_QSTR_image, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = MP_OBJ_NULL } },
1356
+ { MP_QSTR_rho, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = mp_const_none } },
1357
+ { MP_QSTR_theta, MP_ARG_REQUIRED | MP_ARG_OBJ, { .u_obj = mp_const_none } },
1358
+ { MP_QSTR_threshold, MP_ARG_REQUIRED | MP_ARG_INT, { .u_int = 100 } },
1359
+ { MP_QSTR_lines, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1360
+ { MP_QSTR_minLineLength, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1361
+ { MP_QSTR_maxLineGap, MP_ARG_OBJ, { .u_obj = mp_const_none } },
1362
+ };
1363
1363
1364
- // // Parse the arguments
1365
- // mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
1366
- // mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
1364
+ // Parse the arguments
1365
+ mp_arg_val_t args[MP_ARRAY_SIZE (allowed_args)];
1366
+ mp_arg_parse_all (n_args, pos_args, kw_args, MP_ARRAY_SIZE (allowed_args), allowed_args, args);
1367
1367
1368
- // // Convert arguments to required types
1369
- // Mat image = mp_obj_to_mat(args[ARG_image].u_obj);
1370
- // mp_float_t rho = mp_obj_get_float(args[ARG_rho].u_obj);
1371
- // mp_float_t theta = mp_obj_get_float(args[ARG_theta].u_obj);
1372
- // int threshold = args[ARG_threshold].u_int;
1373
- // Mat lines = mp_obj_to_mat(args[ARG_lines].u_obj);
1374
- // mp_float_t minLineLength;
1375
- // if(args[ARG_minLineLength].u_obj == mp_const_none)
1376
- // minLineLength = 0; // Default value
1377
- // else
1378
- // minLineLength = mp_obj_get_float(args[ARG_minLineLength].u_obj);
1379
- // mp_float_t maxLineGap;
1380
- // if(args[ARG_maxLineGap].u_obj == mp_const_none)
1381
- // maxLineGap = 0; // Default value
1382
- // else
1383
- // maxLineGap = mp_obj_get_float(args[ARG_maxLineGap].u_obj);
1368
+ // Convert arguments to required types
1369
+ Mat image = mp_obj_to_mat (args[ARG_image].u_obj );
1370
+ mp_float_t rho = mp_obj_get_float (args[ARG_rho].u_obj );
1371
+ mp_float_t theta = mp_obj_get_float (args[ARG_theta].u_obj );
1372
+ int threshold = args[ARG_threshold].u_int ;
1373
+ Mat lines32S; // TODO: Allow user input
1374
+ mp_float_t minLineLength;
1375
+ if (args[ARG_minLineLength].u_obj == mp_const_none)
1376
+ minLineLength = 0 ; // Default value
1377
+ else
1378
+ minLineLength = mp_obj_get_float (args[ARG_minLineLength].u_obj );
1379
+ mp_float_t maxLineGap;
1380
+ if (args[ARG_maxLineGap].u_obj == mp_const_none)
1381
+ maxLineGap = 0 ; // Default value
1382
+ else
1383
+ maxLineGap = mp_obj_get_float (args[ARG_maxLineGap].u_obj );
1384
1384
1385
- // // Call the corresponding OpenCV function
1386
- // try {
1387
- // HoughLinesP(image, lines , rho, theta, threshold, minLineLength, maxLineGap);
1388
- // } catch(Exception& e) {
1389
- // mp_raise_msg(&mp_type_Exception, MP_ERROR_TEXT(e.what()));
1390
- // }
1385
+ // Call the corresponding OpenCV function
1386
+ try {
1387
+ HoughLinesP (image, lines32S , rho, theta, threshold, minLineLength, maxLineGap);
1388
+ } catch (Exception& e) {
1389
+ mp_raise_msg (&mp_type_Exception, MP_ERROR_TEXT (e.what ()));
1390
+ }
1391
1391
1392
- // // Return the result
1393
- // return mat_to_mp_obj(lines);
1394
- // }
1392
+ // Convert lines to float
1393
+ Mat lines;
1394
+ lines.allocator = &GetNumpyAllocator ();
1395
+ lines32S.convertTo (lines, CV_32F);
1396
+
1397
+ // Return the result
1398
+ return mat_to_mp_obj (lines);
1399
+ }
1395
1400
1396
1401
mp_obj_t cv2_imgproc_HoughLinesWithAccumulator (size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
1397
1402
// Define the arguments
0 commit comments