系统错误:新式getargs格式,但参数不是元组?

40

这行代码中导致 SystemError 的原因是什么呢:cv2.line(output, point1, point2, (0,0,255), 5)


2
听起来像是与"System error: new style getargs format but argument is not a tuple" when using cv2.blur相同的问题。point1point2是元组吗? - Martijn Pieters
你能在问题中发布完整的错误信息吗? - Luke B
请发布完整的代码以查看这些变量是什么。 - Leb
7个回答

26
面对相同问题,我使用元组代替列表解决了它:
# How it looked before:
point1, point2 = [x1, y1], [x2, y2]

# How it should be:
point1, point2 = (x1, y1), (x2, y2)

3
面对同样的问题,尝试了你的解决方案,但没有成功。 - Mohamed Ali

12

Python的OpenCV绘图函数使用元组作为点的表示方式。可能你的point1point2是其他类型的,例如可能是一个list。所以请尝试这样做:

cv2.line(output, tuple(point1), tuple(point2), (0,0,255),5)

错误是由于OpenCV Python扩展使用非元组的东西调用函数PyArg_ParseTuple()引起的。[这里看]


3

看起来最新版本的OpenCV-Python已经解决了这个问题,我通过pip install --upgrade opencv-python将OpenCV-Python从4.4.0.44升级到了4.5.5.64,然后这个错误就消失了。


0

由于在Colab中无法正常工作 :(并出现相同的错误)

cv2.drawChessboardCorners(imgBoard, board_size, found_corners, True) plt.imshow("imgBoard", imgBoard)

*i switched to my own small function:*
def showImageWithCorners(img,cornerToShow):
  plt.plot(cornerToShow[:,0], cornerToShow[:,1], marker='o', color="red")
  plt.imshow(img) 

0

只需按照以下方式编写代码: v2.line(output, tuple(point1), tuple(point2), (0,0,255), 5)


虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Yunnosch

0

试试这个...

point1=(x1,x2)
point2=(y1,y2)
new_img=cv2.line(img,point1,point2,(0,0,255),3)

欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - double-beep

0
传递的参数与期望的参数不匹配。我遇到过同样的问题:
x = cv2.resize(img, (32*32)).flatten()
x.resize(3032, 1)

并且,通过将32*32更正为32、32来解决它。

x = cv2.resize(img, (32,32)).flatten()
x.resize(3032, 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接