2016-08-18 9 views
1

黒い背景のテキストと背景を含むMatを含むMatがあります。テキストが背景の上にくるように、2つのMatをマージしたい。どちらのマットもBGR(CV_8UC3)と同じサイズ(列と行)です。黒/透明ピクセル以外のMatをマージするOpenCV関数

これを行うためのOpenCVの方法は何ですか?

私はいくつかの機能を認識していますが、|=+=はテキストの色を変更しています。addWeighted()は、1つの画像をわずかに透明にしたい場合にのみ機能します。私はちょうど2つの完全なマージをしたい(テキスト画像の黒のピクセルを除く)。私はOpenCV関数ではなく、自分自身を編集しているピクセルよりも、探しています。LUTはオプションであれば良いでしょう。

enter image description here

答えて

4

これを試してみてください:

sourceText = yourTextImage; 
sourceBackground = yourBackgroundImage; 

cv::Mat textTransparent; 
cv::inRange(sourceText, cv::Scalar(0,0,0), cv::Scalar(0,0,0), textTransparent); 
cv::imshow("transparent pixel", textTransparent); // this should show all the transparent pixel as being white. If that's not the case, adjust the range. 
std::cout << "is the transparency mask ok? Press any key with openCV window focus." << std::endl; 

cv::Mat result = sourceBackground.clone(); 
sourceText.copyTo(sourceBackground, 255-textTransparent); // copy pixels, using the created mask. 

代わりに、あなたはsourceBackgroundから、あなたが255-textTransparentを必要としないので、少し速くなるsourceTextに透明ピクセルをコピーすることができ...

コードをテストできませんでした。バグがある場合は教えてください。

+1

ああ...数分遅れて...あまりにも悪い...私はすでにこれを解答するために[画像](http://imgur.com/a/OOI3q)を用意している:((気軽にD) – Miki

+0

@Micka、 'threshold(textImg、mask、1、255、THRESH_BINARY); textImg.copyTo(bkImg、mask);を使用するともっと速くなると思いますか? – Merl

+0

@Merl、可能かもしれません。 – Micka

関連する問題