【问题标题】:How to correctly use cv2.DrawMarker function?如何正确使用 cv2.DrawMarker 功能?
【发布时间】:2019-09-28 05:00:36
【问题描述】:

当我尝试调用我的 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(..) 铸造仍然遇到同样的错误,所以我不知道从这里去哪里......

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

【问题讨论】:

  • 你的关键点是浮点数而不是整数吗?
  • 哦 ***** 我怎么能错过。谢谢,解决了问题!!编辑:我需要有人回答,以便我可以将问题标记为已解决

标签: python opencv floating-point integer typeerror


【解决方案1】:

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

keypoints = keypoints.astype(np.int32)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多