如何正确使用cv2.DrawMarker函数?

时间:2019-05-10 09:48:04

标签: python opencv floating-point integer typeerror

当我尝试调用cv2.drawMarker函数时出现以下错误。

...
line_type=cv2.LINE_AA)
TypeError: integer argument expected, got float.

Process finished with exit code 1

这是我的函数调用

    for keypoint in keypoints:
        im_with_keypoints = cv2.drawMarker(im_with_keypoints,
                                           keypoint.pt,
                                           (0, 0, 255),
                                           markerType=cv2.MARKER_CROSS,
                                           markerSize=30,
                                           thickness=2,
                                           line_type=cv2.LINE_AA)

这是来自OpenCV官方网站的功能文档。

void cv::drawMarker ( Mat &             img,
                      Point             position,
                      const Scalar &    color,
                      int               markerType = MARKER_CROSS,
                      int               markerSize = 20,
                      int               thickness = 1,
                      int               line_type = 8 
)   

我尝试从

进行更改
line_type  = cv2.LINE_AA

line_type = int(0)

尝试强制使用参数类型,但是我仍然遇到相同的错误。

我试图寻找其他代码示例,但是cv2.LINE_AA应该可以工作。我的int(..)转换仍然遇到相同的错误,因此我不确定从这里去哪里...

任何帮助将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:0)

错误的逻辑原因只能是您的keypointsfloat而不是integer dtype,因为您已经正确传递了所有其他参数的预期类型。 您可以使用astype转换dtype:

keypoints = keypoints.astype(np.int32)

调试这些错误的一个好技巧是查看前几行,如果报告的错误行看起来还不错,则查看其他参数。