单击 Merge() 函数上的 CV 和 IInputArrayOfArrays

Emgu CV and IInputArrayOfArrays on Merge() function

我很难理解什么是 IInputArrayOfArrays

当你查看 OpenCV 或 EmguCV 的文档时有点混乱,大多数函数在函数参数上得到 IInputArrayIOutputArray,但通过一些搜索你会知道它基本上是指垫子。

但在这种情况下,我认为 IInputArrayOfArrays 必须是一个 Mat 数组,但这在 C# 上不起作用:

Mat[] channels = hsv.Split();
channels[1] = customMask;
CvInvoke.Merge(channels, hsv);

因为Can't convert from Emgu.CV.Mat[] to Emgu.CV.IInputArrayOfArrays.

由于Split()函数returnsMat[]Merge()函数(与Split()正好相反)是合乎逻辑的还需要 Mat[]...

注意不要混淆CvInvoke.Split()Mat.Split().

使用 Mat.Split() 将 return 变成 Mat[]CvInvoke.Merge() 不接受。

相反,如果您使用 CvInvoke.Split(),它将 return 您一个 VectorOfVectorOfByte,与 CvInvoke.Merge() 方法所需的类型相同,使其与CvInvoke.Split()确实如此。

这是您的案例示例:

VectorOfVectorOfByte splitted = new VectorOfVectorOfByte();
CvInvoke.Split(channels, splitted);
// ... //
CvInvoke.Merge(splitted, channels);