【问题标题】:error while drawing rectangle on detected qr code在检测到的二维码上绘制矩形时出错
【发布时间】:2021-07-04 15:13:09
【问题描述】:

我创建了一个简单的程序来检测图像上的二维码:

self.qrReader=cv2.QRCodeDetector()
self.text,points,_=self.qrReader.detectAndDecode(self.img)

现在当我在检测到的二维码上绘制矩形时:

cv2.rectangle(self.img,points[0][0],points[0][2],color,thickness)

我遇到了一个错误:

  File "e:\Users\Abhimanyu\Documents\aiocv\aiocv\qr_code_reader_module.py", line 19, in findQRCode
    cv2.rectangle(self.img,points[0][0],points[0][2],color,thickness)
cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'rectangle'
> Overload resolution failed:
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
>  - Can't parse 'rec'. Expected sequence length 4, got 2
>  - Can't parse 'rec'. Expected sequence length 4, got 2

当我打印点[0][0]时:

[ 40.       40.     ]

当我打印点[0][2]时:

[288.99997 288.99997]

完整的数组如下所示:

[[[ 40.       40.     ]
  [288.99997  40.     ]
  [288.99997 288.99997]
  [ 40.      288.99997]]]

这里有什么问题?

【问题讨论】:

  • 打印points[0][0]points[0][2]。向我们展示输出。
  • @ChristophRackwitz 完成
  • cv2.rectangle 的点应该是元组而不是 NumPy 数组。试试cv2.rectangle(tuple(self.img,points[0][0]), tuple(points[0][2]) ,color,thickness)cv2.rectangle(tuple(self.img,points[0][0].astype(np.int32)), tuple(points[0][2].astype(np.int32)) ,color,thickness)

标签: python opencv qr-code


【解决方案1】:

鉴于您的帖子中print(points[0][0]) 输出[ 40. 40. ]print(points[0][2]) 输出[288.99997 288.99997],只需替换:

cv2.rectangle(self.img, points[0][0], points[0][2], color, thickness)

与:

pt1 = int(points[0][0][0]), int(points[0][0][1])
pt2 = int(points[0][2][0]), int(points[0][2][1])
cv2.rectangle(self.img, pt1, pt2, color, thickness)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多