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

标签 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(..) 转换仍然遇到同样的错误,所以我不确定从这里去哪里......

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

最佳答案

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

keypoints = keypoints.astype(np.int32)

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

关于python - 如何正确使用 cv2.DrawMarker 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074986/

相关文章:

Python/Pandas - 对 DataFrame 列项求和

opencv - 使用 openCV 检测图像中的白色像素簇

c++ - 找到满足浮点不等式的最小整数

c - 给 float 变量赋值会改变 C 中的值

python - 稳健的 numpy.float64 相等性测试

python - 调用 sess.run() 时 Tensorflow 挂起

python - 奇怪的行为 : pcolormesh and meshgrid (easy)

python - 使用请求库发送具有相同键的多个值的 POST 请求

image - plt.imshow 在 IPython 中显示灰度图像的彩色图像

python - 如何根据相机调整 OpenCV 实时视频源的宽高比 (Python)