【Python】cv2.rectangleでのエラー"TypeError: an integer is required (got type tuple)"の対処方法
物体検出を行っていて、各クラスに色を割り当ててバウンディングボックスを描画したい、という状況でした。何故か修正前コードでは表題のエラーが発生し、修正後コードのような書き換えをしなければなりませんでした。本質でない部分に大分時間を使ったので、同じエラーが起きる場合に備えてメモしておきます。
修正前コード
# 各クラスに色を割り当てる colors = np.random.uniform(0, 255, (num_classes, 3)).astype(np.int32) # クラスに応じて異なる色でバウンディングボックスを描画 for i in range(boxes.size(0)): class_id = boxes[i, 0] box = boxes[i, 1:] pt1 = (box[0], box[1]) pt2 = (box[2], box[3]) color = tuple(colors[class_id]) # 何故かここで"TypeError: an integer is required"エラーが発生 cv2.rectangle(orig_image, pt1, pt2, color, 4)
修正後コード
# 各クラスに色を割り当てる colors = np.random.uniform(0, 255, (num_classes, 3)) # クラスに応じて異なる色でバウンディングボックスを描画 for i in range(boxes.size(0)): class_id = boxes[i, 0] box = boxes[i, 1:] pt1 = (box[0], box[1]) pt2 = (box[2], box[3]) # ここを変更した color = tuple(map(int, colors[class_id])) cv2.rectangle(orig_image, pt1, pt2, color, 4)