2016-06-01 55 views
2

OpenCVのpythonでは、cv2.imreadで画像を読み取り、BGR numpy配列を取得するとします。次に、cv2.inRangeコマンドでマスクを生成します。マスクは同じ幅/高さを持ち、各マスクピクセルは黒または白です。opencv python BGR画像領域にマスク領域(黒または白のピクセル)をコピーする

マスク(黒と白のピクセルのイメージとして撮影された)からカラーイメージの領域に領域をコピーしたいとします。

どうすればよいですか?これは動作しません

img[10:20,10:20] = mask[10:20,10:20] 

最初にマスクをBGRイメージに変換する必要がありますか?もしそうなら、どのように?

編集:画像全体にapply mask to color imageのようにマスク全体を適用したくありません。私が望むものを言うもう一つの方法:マスクを白黒のイメージとして見てください。その画像の領域を(黒または白のピクセルのセットとして)別の画像にコピーしたいと思います。結果として得られる画像は、黒または白のピクセルのみを含む1つの小さな矩形領域を除いて、カラー画像になります。結果は、PhotoshopのIが白黒画像の矩形領域をコピーし、その長方形をカラー画像の領域にコピーした場合と似ています。

(私はOpenCVのに新たなんだ)

+0

「マスクから領域をコピーする」とはどういう意味ですか?あなたはイメージを使ってそれを見せることができますか? –

+0

マスクはバイナリです。私は、マスク領域(座標)の黒または白の各ピクセルを、画像内の同じピクセル領域にコピー(置き換え)したいと考えています。同様に、私がPhotoshopの場合、1つの画像上で長方形の領域を選択してコピーし、別の画像に貼り付けます。 – cv2asker

+1

[マスクをカラーイメージに適用する](0120-18753) –

答えて

0

あなたが直接マスク単一チャネル(グレースケール)でそれを実行しようとした場合、配列スライスの形状は同じではないし、操作は失敗します。

>>> img[10:20,10:20] = mask[10:20,10:20] 

ValueError: could not broadcast input array from shape (10,10) into shape (10,10,3) 

マスクをBGRに変換する必要があります。マスクをBGRに変換すると、元の画像と同様に3チャンネルになります。

>>> bgr_mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR) 
>>> img[10:20,10:20] = bgr_mask[10:20,10:20] 
関連する問題