2

我想知道 EmguCV 是否允许一种简单而有效的方法来执行 MATLAB 中的以下行:

C = A .* B

(假设 A、B、C 是表示具有相同维度和类型的灰度图像的矩阵)。

假设我想做上面相同的操作,但是使用Image<Gray, byte>EmguCV 的两个对象,那么问题是:有没有办法将两个相同尺寸的图像逐点相乘?

4

1 回答 1

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
于 2013-03-16T14:24:45.373 回答