旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【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)