我希望知道EmguCV是否允许一种简单有效的方法在MATLAB中完成以下行:
C = A .* B
(假设A,B和C是表示具有相同尺寸和类型的灰度图像的矩阵)。
假设我想在上面进行相同的操作,但是使用EmguCV的两个Image<Gray, byte>
个对象,问题是:有没有办法将具有相同尺寸的点两个图像相乘? /强>
答案 0 :(得分: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