I am struggling to understand what is an IInputArrayOfArrays
.
It's a bit confusing when you check the docs of OpenCV or EmguCV and most of the functions got IInputArray
or IOutputArray
on the function parameters, but with some search you get to know that it means basically a Mat.
But in this case, I thought that a IInputArrayOfArrays
must be an array of Mat, but this is not working on C#:
Mat[] channels = hsv.Split();
channels[1] = customMask;
CvInvoke.Merge(channels, hsv);
Because Can't convert from Emgu.CV.Mat[] to Emgu.CV.IInputArrayOfArrays
.
Since the Split()
function returns Mat[]
, it would be logical that the Merge()
function (that is exactly the opposite of the Split()
) needs a Mat[]
also...
Pay attention to not confuse CvInvoke.Split()
and Mat.Split()
.
Using Mat.Split()
will return a Mat[]
but CvInvoke.Merge()
does not accept that.
Instead, if you use CvInvoke.Split()
it will return you a VectorOfVectorOfByte
, the same type that the CvInvoke.Merge()
method needs, making it exactly the opposite of the CvInvoke.Split()
indeed.
Here's an example with your case:
VectorOfVectorOfByte splitted = new VectorOfVectorOfByte();
CvInvoke.Split(channels, splitted);
// ... //
CvInvoke.Merge(splitted, channels);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With