C# 如何使用emc对图像进行去饱和#

C# 如何使用emc对图像进行去饱和#,c#,opencv,emgucv,C#,Opencv,Emgucv,我知道我们通过减少饱和度通道中的值来降低图像的饱和度。我想用c#和emgu 例如,下面是使用opencv执行此操作的c++代码: Mat Image = imread("images/any.jpg"); // Specify scaling factor float saturationScale = 0.01; Mat hsvImage; // Convert to HSV color space cv::cvtColor(Image,hsvImage,COLOR_BGR2HSV); /

我知道我们通过减少饱和度通道中的值来降低图像的饱和度。我想用c#emgu

例如,下面是使用opencv执行此操作的c++代码:

Mat Image = imread("images/any.jpg");
// Specify scaling factor
float saturationScale = 0.01;

Mat hsvImage;
// Convert to HSV color space
cv::cvtColor(Image,hsvImage,COLOR_BGR2HSV);

// Convert to float32
hsvImage.convertTo(hsvImage,CV_32F);

vector<Mat>channels(3);
// Split the channels
split(hsvImage,channels);
// Multiply S channel by scaling factor 
channels[1] = channels[1] * saturationScale;

// Clipping operation performed to limit pixel values 
// between 0 and 255
min(channels[1],255,channels[1]);
max(channels[1],0,channels[1]);

// Merge the channels 
merge(channels,hsvImage);

// Convert back from float32
hsvImage.convertTo(hsvImage,CV_8UC3);

Mat imSat;
// Convert to BGR color space
cv::cvtColor(hsvImage,imSat,COLOR_HSV2BGR);

// Display the images
Mat combined;
cv::hconcat(Image, imSat, combined);
namedWindow("Original Image   --   Desaturated Image", CV_WINDOW_AUTOSIZE);
有一个错误:

无法将“Emgu.CV.Image[]”转换为 “Emgu.CV.iinputarayofarray”


我将一个
VectorOfMat
放入
CvInvoke.Merge
中,它就工作了

Mat[] m = new Mat[3];
m[0] = CvInvoke.CvArrToMat(channels[0]);
m[1] = CvInvoke.CvArrToMat(channels[1]);
m[2] = CvInvoke.CvArrToMat(channels[2]);

VectorOfMat vm = new VectorOfMat(m);

CvInvoke.Merge(vm, imhHsv);
CvInvoke.Merge(channels, imhHsv); 
Mat[] m = new Mat[3];
m[0] = CvInvoke.CvArrToMat(channels[0]);
m[1] = CvInvoke.CvArrToMat(channels[1]);
m[2] = CvInvoke.CvArrToMat(channels[2]);

VectorOfMat vm = new VectorOfMat(m);

CvInvoke.Merge(vm, imhHsv);