这行代码中导致 SystemError 的原因是什么呢:cv2.line(output, point1, point2, (0,0,255), 5)
?
# How it looked before:
point1, point2 = [x1, y1], [x2, y2]
# How it should be:
point1, point2 = (x1, y1), (x2, y2)
Python的OpenCV绘图函数使用元组作为点的表示方式。可能你的point1
和point2
是其他类型的,例如可能是一个list
。所以请尝试这样做:
cv2.line(output, tuple(point1), tuple(point2), (0,0,255),5)
错误是由于OpenCV Python扩展使用非元组的东西调用函数PyArg_ParseTuple()
引起的。[这里看]
看起来最新版本的OpenCV-Python已经解决了这个问题,我通过pip install --upgrade opencv-python
将OpenCV-Python从4.4.0.44升级到了4.5.5.64,然后这个错误就消失了。
由于在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)
只需按照以下方式编写代码: v2.line(output, tuple(point1), tuple(point2), (0,0,255), 5)
试试这个...
point1=(x1,x2)
point2=(y1,y2)
new_img=cv2.line(img,point1,point2,(0,0,255),3)
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)
point1
和point2
是元组吗? - Martijn Pieters