2017-10-24 1 views
0

カラーイメージにカラーマスクを適用しようとしています。カラーマスクは、カラー画像に適用したいアウトラインです。ピンクの輪郭(BGR = [180, 105,255])を除き、マスクはすべて黒です。奇妙なことに、次の方法を使用して、シアンである[227,230,49]の輪郭を適用することができます。OpenCV - カラーイメージにカラーマスクを適用する

カラー画像をimgColor、シアンの輪郭をmaskCyanとします。再び、このマスクは、[227,230,49]である輪郭の一部であるピクセルを除いてすべて黒色の[0,0,0]である。それから私はimgColor_with_cyan_outline = cv2.bitwise_or(imgColor, maskCyan)を実行するだけでイメージにこれを適用することができます。私はこれをmaskPinkとし、シアンの代わりにピンクのピクセルを使用してimgColor_with_pink_outline = cv2.bitwise_or(imgColor, maskPink)を使用すると、マスクまたはアウトラインを適用せずに元の画像が返されます。私はちょうどどのようにcv2.bitwise_or()の作品を誤解していると思うが、わからない。

カラーイメージにカラーマスクを適用する他の方法はありますか?

+1

が重複する可能性を読み取ることができます(https://stackoverflow.com/questions/22255368/copying-values-from-one-numpy-matrix-to-another-dependent-on-boolean-mask) –

+1

bitwiseまたは - >は各ビットをとり、他の画像の同じビット。たとえば、1つのイメージのピクセル63と255のピクセルが255の場合は、255になります。63と72の場合は、127が得られます(63111111 adn 72は01001000です)。マスクの逆数をバイナリ(白と黒)で行い、ピクセルを「削除」するか、イメージから黒にすることができます。その後、シアンのものを追加して、シアンの画像を画像に入れます。numpyを使って@DanMašekのリンクに置き換えてください。 – api55

答えて

2

ビット単位でOR操作のプロパティを誤解していると思います。 cv2.bitwise_orは、2つのソース画像とオプションのマスクを取ります。

cv2.bitwise_or(src1, src2, dst, mask) 

だからsrc1が値1とsrc2の画素を有する場合に値2の画素を有し、その後src1 | src2は:

8ビット符号なしcharの結果として得られる画素値3を行う
0001 = src1 
0010 = src2 
0011 = src1 | src2 

最大の結果ピクセル値は255(135 | 235は255)になります。

+0

これは理にかなっています。私は '' cv2.bitwise_or([255,255,255]、[0,0,0])= [255,255,255] 'と' cv2.bitwise_or( [255,255,255]、[126,122,0])= [126,122,0]。それは私が本当に必要とするのは、最初のイメージのピクセルを2番目の引数のゼロでないピクセルに置き換える関数です。 – greenthumbtack

+0

@ greenthumbtackあなたが望むのは、マスクに基づいてイメージを別のイメージにコピーすることです。それについては、この優れた投稿を参照してください:https://stackoverflow.com/questions/41572887/equivalent-of-copyto-in-python-opencv-bindings – zindarod

0

フィルタリングのためのbaundaryがある場合、cv2.inrangeはマスキングの機能を使用できます。次のコードを値として変更します。構文をチェックし、あなたのOpenCVのバージョンの詳細については

Pink=cv2.inrange(pink baundary) 
Black=cv2.inrange(black baundary) 
Mask= Pink+Black 

に応じて、あなたが[ブールマスク上の別の依存に1つのnumpyの行列から値をコピー]の

https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html

+0

これはどうすれば使用できますか?マスクには黒とピンクの2色しかありません。 「inrange」は、マスクを適用しないで、イメージ内の色を探すことだと思っていました。 – greenthumbtack

+0

私のコメントを編集してください私の答えをもう一度見てください。 –

関連する問題