我使用以下代码来检测模式。为什么会抛出TypeError?
# loop over the contours
c中的c:
# compute the center of the contour
M = cv2.moments(c)
cX = (M["m10"] / (M["m00"] + 1e-7))
cY = (M["m01"] / (M["m00"] + 1e-7))
# draw the contour and center of the shape on the image
cv2.drawContours(frame1, [c], -1, (0, 255, 0), 2)
cv2.circle(frame1, (cX, cY), 7, (255, 255, 255), -1)
cv2.putText(frame1, "center", (cX - 20, cY - 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
这个按摩错误
cv2.circle(frame1, (cX, cY), 7, (255, 255, 255), -1)
TypeError:期望的整数参数,浮点数
答案 0 :(得分:2)
(cX, cY)
是一个OpenCV点。它表示 x-y 坐标,换言之,表示像素位置。如果你调用的函数说它需要一个整数,那么它需要一个整数。无论你认为它应该期待什么。
cv2.moments()
返回10个浮点字典。如果你想使用它返回的值作为坐标点,那么你需要以某种方式将它们转换为整数。
答案 1 :(得分:0)
这是因为您的部门为您提供了浮点值:
cX = (M["m10"] // (M["m00"] + 1e-7))
cY = (M["m01"] // (M["m00"] + 1e-7))
这将解决您的问题。