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)