单击 Merge() 函数上的 CV 和 IInputArrayOfArrays
Emgu CV and IInputArrayOfArrays on Merge() function
我很难理解什么是 IInputArrayOfArrays
。
当你查看 OpenCV 或 EmguCV 的文档时有点混乱,大多数函数在函数参数上得到 IInputArray
或 IOutputArray
,但通过一些搜索你会知道它基本上是指垫子。
但在这种情况下,我认为 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);
我很难理解什么是 IInputArrayOfArrays
。
当你查看 OpenCV 或 EmguCV 的文档时有点混乱,大多数函数在函数参数上得到 IInputArray
或 IOutputArray
,但通过一些搜索你会知道它基本上是指垫子。
但在这种情况下,我认为 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);