EmguCV / OpenCVの画像加算/減算
-
16-09-2019 - |
質問
私はEmguCVを使用していますが、AForge .NETの<のhref = "http://www.aforgenet.com/framework/docs/html/f7f4ad2c-fb50-a76b-と同様のフィルタを作成するために、2枚の画像を減算しようとしています38fc-26355e0eafcf.htm」REL = "nofollowをnoreferrer"> MoveTowards のフィルタ
これは上記URLからの私の少し変更したバージョンを行おうとするものです。 2枚の画像、ソースとオーバーレイを考える - それはゆっくりと、オーバーレイに向けて元画像を移動します。それは次のように基づいてこれを行います:
result = source + movementFactor * (overlay - source);
この結果、ソースとオーバーレイ画像であるとmovementFactor 1の範囲0の変化率である。
Iが1に等しいmovementFactorでコードでこれをしようとしたときに、、結果を台無しに見えた(モーション軌跡のようなものがありました)。さらに、それをテストするために、私は、上記の式からmovementFactorを除去し、結果=ソース+オーバーレイ作ら - ソース。私は私がやった結果としてオーバーレイ画像を見ることが期待が、点滅した画像の一個の領域と一緒ます。
私は、加算/減算が行われるとき画素強度が上限または下限にクリップされ得ることを推測しています。
私はこれで何をしたい達成することができます:
for (int i = 0; i < src.Height; i++)
{
for (int j = 0; j < src.Width; j++)
{
res[i, j] = new Gray(src[i, j].Intensity + movementFactor * (ovr[i, j].Intensity - src[i, j].Intensity));
}
}
しかし、これはかなり処理が遅くなります。どのように私は、加算/減算の問題以上とスピードの問題を克服することができますか?あなたの答えてくれてありがとう!
解決
私は誰かが、将来的に同じ問題横切る場合には、私は、こっち見つかった答えを投稿します。
これは、あなたがそれを行うだろうかです。
Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result);
出典:EmguCVのフォーラムは、ここで投稿があります私に返事を与えたの
他のヒント
私は場合に誰かが横切る、私はこっち見つかった答えを投稿します 将来的には同じ問題ます。
これは、あなたがそれを行うだろうかです。
Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size); CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result);
出典:EmguCVのフォーラムは、ここにあります
私に返事を与えたポスト
そのためのクリーナー構文があることに注意します:
var result = frame.AddWeighted(1.0 - movementFactor, overlay, movementFactor, 0.0);