EmguCV が、MATLAB で次の行を使用して行う簡単で効率的な方法を許可しているかどうかを知りたいです。
C = A .* B
(A、B、および C は、同じ次元とタイプのグレースケール イメージを表す行列であると仮定します)。
上記と同じ操作を行いたいと仮定しImage<Gray, byte>
ますが、EmguCV の 2 つのオブジェクトを使用すると、問題は次のとおりです。同じ次元の 2 つの画像をポイントごとに乗算する方法はありますか?
問題を解決しました。次のように定義された 3 つのグレースケール イメージがあるとします。
//We can use, for example, two files with the same dimensions, e.g. 100x100
Image<Gray, byte> A = new Image<Gray, byte>("imgA_100x100.jpg");
Image<Gray, byte> B = new Image<Gray, byte>("imgB_100x100.jpg");
//The image C will be the result of point-by-point multiplication
//We need to initialize it
Image<Gray, byte> C = new Image<Gray, byte>(A.Width, A.Height);
乗算を実行するには、次のコードを使用するだけです。
CvInvoke.cvMul(A.Ptr, B.Ptr, C.Ptr, scale);
上記の行は、私が と呼んだ倍率で、ポイントごとに乗算を実行しscale
ます。上記のコードが意味することを疑似コードを使用して説明すると、次のように言えます。
C[i, j] = A[i, j] * B[i, j] * scale