@@ -1348,50 +1348,55 @@ mp_obj_t cv2_imgproc_HoughLines(size_t n_args, const mp_obj_t *pos_args, mp_map_
13481348 return mat_to_mp_obj (lines);
13491349}
13501350
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+ };
13631363
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);
13671367
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 );
13841384
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+ }
13911391
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+ }
13951400
13961401mp_obj_t cv2_imgproc_HoughLinesWithAccumulator (size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
13971402 // Define the arguments
0 commit comments