社会人研究者が色々頑張るブログ

pythonで画像処理やパターン認識をやっていきます

opencvの色にnumpy arrayを使う方法

やりたい事

cv2.lineとかcv2.rectangleの描画色を、numpy array(変数)で指定したい

import cv2
import numpy as np

colors = np.random.randint(0, 255, (10, 3)) # 10色の色をランダムに作成
img = cv2.imread("./img.jpg")
img = cv2.line(img, (0, 0), (100, 100), colors[0], 1)

なんとなく実行できそうなコードですが、エラーが出ます

error  Traceback (most recent call last)
<ipython-input-21-063e64114cbb> in <module>
----> 1 cv2.line(img, (0, 100), (256, 100), color, 1)

error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'line'
> Overload resolution failed:
>  - Scalar value for argument 'color' is not numeric
>  - Scalar value for argument 'color' is not numeric

解決策

要は、色の指定はスカラー値でないと駄目だよーってことですね。
numpy arrayの値をスカラー値に変換します。

import cv2
import numpy as np

colors = np.random.randint(0, 255, (10, 3)) # 10色の色をランダムに作成
img = cv2.imread("./img.jpg")

# img = cv2.line(img, (0, 0), (100, 100), colors[0], 1)
img = cv2.line(img, (0, 0), (100, 100), colors[0].tolist(), 1)