Skip to content

Commit 3acc441

Browse files
committed
Implement HoughLinesP()
Fixes #3 Just converts to float
1 parent 527a8a5 commit 3acc441

File tree

2 files changed

+49
-44
lines changed

2 files changed

+49
-44
lines changed

src/imgproc.cpp

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

13961401
mp_obj_t cv2_imgproc_HoughLinesWithAccumulator(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
13971402
// Define the arguments

src/imgproc.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ extern mp_obj_t cv2_imgproc_getStructuringElement(size_t n_args, const mp_obj_t
3636
extern mp_obj_t cv2_imgproc_HoughCircles(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
3737
extern mp_obj_t cv2_imgproc_HoughCirclesWithAccumulator(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
3838
extern mp_obj_t cv2_imgproc_HoughLines(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
39-
// extern mp_obj_t cv2_imgproc_HoughLinesP(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
39+
extern mp_obj_t cv2_imgproc_HoughLinesP(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
4040
extern mp_obj_t cv2_imgproc_HoughLinesWithAccumulator(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
4141
extern mp_obj_t cv2_imgproc_isContourConvex(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
4242
extern mp_obj_t cv2_imgproc_Laplacian(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
@@ -92,7 +92,7 @@ static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_getStructuringElement_obj, 2, cv2_
9292
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughCircles_obj, 4, cv2_imgproc_HoughCircles);
9393
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughCirclesWithAccumulator_obj, 4, cv2_imgproc_HoughCirclesWithAccumulator);
9494
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughLines_obj, 4, cv2_imgproc_HoughLines);
95-
// static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughLinesP_obj, 4, cv2_imgproc_HoughLinesP);
95+
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughLinesP_obj, 4, cv2_imgproc_HoughLinesP);
9696
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_HoughLinesWithAccumulator_obj, 4, cv2_imgproc_HoughLinesWithAccumulator);
9797
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_isContourConvex_obj, 1, cv2_imgproc_isContourConvex);
9898
static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_Laplacian_obj, 2, cv2_imgproc_Laplacian);
@@ -149,8 +149,8 @@ static MP_DEFINE_CONST_FUN_OBJ_KW(cv2_imgproc_threshold_obj, 4, cv2_imgproc_thre
149149
{ MP_ROM_QSTR(MP_QSTR_getStructuringElement), MP_ROM_PTR(&cv2_imgproc_getStructuringElement_obj) }, \
150150
{ MP_ROM_QSTR(MP_QSTR_HoughCircles), MP_ROM_PTR(&cv2_imgproc_HoughCircles_obj) }, \
151151
{ MP_ROM_QSTR(MP_QSTR_HoughCirclesWithAccumulator), MP_ROM_PTR(&cv2_imgproc_HoughCirclesWithAccumulator_obj) }, \
152-
{ MP_ROM_QSTR(MP_QSTR_HoughLines), MP_ROM_PTR(&cv2_imgproc_HoughLines_obj) }, \
153-
/* { MP_ROM_QSTR(MP_QSTR_HoughLinesP), MP_ROM_PTR(&cv2_imgproc_HoughLinesP_obj) }, */ \
152+
{ MP_ROM_QSTR(MP_QSTR_HoughLines), MP_ROM_PTR(&cv2_imgproc_HoughLines_obj) }, \
153+
{ MP_ROM_QSTR(MP_QSTR_HoughLinesP), MP_ROM_PTR(&cv2_imgproc_HoughLinesP_obj) }, \
154154
{ MP_ROM_QSTR(MP_QSTR_HoughLinesWithAccumulator), MP_ROM_PTR(&cv2_imgproc_HoughLinesWithAccumulator_obj) }, \
155155
{ MP_ROM_QSTR(MP_QSTR_isContourConvex), MP_ROM_PTR(&cv2_imgproc_isContourConvex_obj) }, \
156156
{ MP_ROM_QSTR(MP_QSTR_Laplacian), MP_ROM_PTR(&cv2_imgproc_Laplacian_obj) }, \

0 commit comments

Comments
 (0)