我想知道 EmguCV 是否允许一种简单而有效的方法来执行 MATLAB 中的以下行:
C = A .* B
(假设 A、B、C 是表示具有相同维度和类型的灰度图像的矩阵)。
假设我想做上面相同的操作,但是使用Image<Gray, byte>
EmguCV 的两个对象,那么问题是:有没有办法将两个相同尺寸的图像逐点相乘?
我解决了这个问题。假设我们有三个灰度图像,以这种方式定义:
//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