こんにちは私は(カスタム注文でオーバレイしたい)Mat
です。 Mat
には、いくつかのopencvポリゴンが保持されています(透明度が高いことを意味します)。このMat
私はオーバーレイ/マージする必要があります。しかし、古典的なアルファブレンドでは100%の不透明度に似ていますが、透明性はありません。OpenCv overlay 2つのMat(図面ではなく画像)の透明度
これは私がマージしたいものの簡単なサンプルコードです。
Mat m1, m2;
m1.create(Point{ 100,100 }, CV_8UC4);
m2.create(Point{ 100,100 }, CV_8UC4);
cv::polylines(m1, std::vector<Point>{ Point{ 2,20 },Point{ 20,40 } }, true, Scalar(6, 6, 255));
cv::polylines(m2, std::vector<Point>{Point{ 100,100 }, Point{ 0,0 } }, true, Scalar(192, 112, 0));
私は様々な理由により1 Mat
に直接ポリゴンを描画することができないことに、注意してください。
m1.copyTo(m2);
が動作することを考えたが、その上書きすべて(含黒の背景)
それは背景なしでオーバーレイ/マージを取得する方法任意のアイデア?私はマットの間違いを構築することができますか?
(私は黒ではない、すべてを推測)コピーしたい部分のマスクを作成し、そのマスクで 'copyTo'を使用しています。 –
@DanMašekは、黒以外のすべてを検出するための巧妙な機能を知っていますか?私は 'cv :: threshold(m1、m1、1、255、cv :: THRESH_BINARY);を試しましたが、うまく動作しません。 – user1234
図面のサンプル画像を追加します。 – Micka