Hi Johannes,
There are basically two options:
1) Create each "plane" (or channel) as an independent matrix. So instead of having a packed array, just create one simple 1-channel array for each "color". In this case the output will be something like Tuple[Mat, Mat, Mat]. If you have this, you can send it directly to Merge (Dsp) and that will create a 3-channel matrix, which you can then convert to an image, etc.
2) If you prefer to do everything in Python, you can use Mat.FromArray directly. There is an overload that can take the number of channels, etc (the longest one). Unfortunately in this case you cannot use a rectangular 2D array. It has to be a 1D array with all the data. Fortunately, it is always possible to treat a 1D array as a 2D array with some index math:
from OpenCV.Net import *
from System import Array
@returns(Mat)
def generate():
array = Array.CreateInstance(float,3 * 100)
for i in range(100):
array[i * 3 + 0] = i
array[i * 3 + 1] = i / 2
array[i * 3 + 2] = i / 3
yield Mat.FromArray(array,10,10,Depth.F64,3)
Hope this helps!