首页 > 解决方案 > 薛定谔元组,是元组而不是元组

问题描述

我有一个使用单个数值构建的元组元组

 maxcontour = ( (minx,miny),(maxx,miny),(maxx,maxy),(minx,maxy) )

并且确实是一个元组

 print (maxcontour)

((374, 0), (2553, 0), (2553, 3999), (374, 3999))

但是在需要元组的地方使用它时

  cv2.polylines(img, maxcontour, True, (0,0,255), 5 )

我收到这个错误

错误:OpenCV(4.5.3):-1:错误:(-5:错误参数)在函数“折线”中重载解析失败:

  • pts 不是数字元组
  • 参数“pts”的预期 Ptr<cv::UMat>

我显然忽略了一些非常基本的东西,但我看不到什么;并且错误消息“Expected Ptrcv::UMat for argument 'pts'”没有太大帮助。

创建有效的“数字元组”的方法是cv.polylines()什么?

标签: pythonopencv

解决方案


正如@Nathaniel Ford 所说,这些点需要是一个 numpy 数组

要绘制多边形,首先需要顶点坐标。将这些点放入一个形状为 ROWSx1x2 的数组中,其中 ROWS 是顶点数,它应该是 int32 类型。

所以

maxcontour = np.array( [[minx,miny],[maxx,miny],[maxx,maxy],[minx,maxy]],np.int32)
maxcontour = maxcontour.reshape((-1,1,2))
cv2.polylines(img, [maxcontour], True, (0,0,255))

推荐阅读