OpenCVで読み込んだ画像の特定色を指定して抽出

画像から特定の画素を抽出する方法として,inRange関数を使う方法が良く取り上げられるが,RGB値で色を指定したり,複雑な条件を付けて画素抽出を行う場合はNumpyによる行列操作で抽出するのが最も良い方法なのではないかと思う.

例えば,imreadで読み込んだ画像の青(Blue)チャンネルピクセル値が101の画素以外を黒く塗りつぶす(0,0,0をセットする)場合,以下の実装が考えられる.

mask = cv2.imread(mask_path)
mask = cv2.cvtColor(mask, cv2.COLOR_BGR2RGB)

mask[mask[:,:,1] != 101] = [0, 0, 0]

この実装では,mask[:,:,1] != 101でTrue/Falseの1チャンネルの画像を作成し,さらにNumpyのマスクを使うことによって特定色以外を塗りつぶす処理になっている.マスクの条件部分を取り換えたりすれば複雑な色条件を加味した抽出が実装できるはずだ.

OpenCV,Python

Posted by vastee