Estoy luchando por entender qué es un IInputArrayOfArrays .
Es un poco confuso cuando revisa los documentos de OpenCV o EmguCV y la mayoría de las funciones obtuvieron IInputArray o IOutputArray en los parámetros de la función, pero con un poco de búsqueda llega a saber que significa básicamente un Mat.
Pero en este caso, pensé que IInputArrayOfArrays debe ser una matriz de Mat, pero esto no funciona en C#:
Mat[] channels = hsv.Split(); channels[1] = customMask; CvInvoke.Merge(channels, hsv); Porque Can't convert from Emgu.CV.Mat[] to Emgu.CV.IInputArrayOfArrays .
Dado que la función Split() devuelve Mat[] , sería lógico que la función Merge() (que es exactamente lo contrario de Split() ) también necesite un Mat[] ...
Preste atención para no confundir CvInvoke.Split() y Mat.Split() .
Usar Mat.Split() devolverá Mat[] pero CvInvoke.Merge() no lo acepta.
En cambio, si usa CvInvoke.Split() le devolverá un VectorOfVectorOfByte , el mismo tipo que necesita el método CvInvoke.Merge() , por lo que es exactamente lo contrario de CvInvoke.Split() .
Aquí tienes un ejemplo con tu caso:
VectorOfVectorOfByte splitted = new VectorOfVectorOfByte(); CvInvoke.Split(channels, splitted); // ... // CvInvoke.Merge(splitted, channels);