c# - 如何使用 Emgu c# 去饱和图像

标签 c# opencv emgucv

我知道我们通过降低饱和度 channel 中的值来降低图像的饱和度。我想使用 来完成此操作c# emgu

例如这里是 c++ 代码使用 opencv 这样做:

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);

在 c# 中,我有:
var img = new Image<Gray, byte>("images/any.jpg");
var imhHsv = img.Convert<Hsv, byte>();
var channels = imhHsv.Split();
// Multiply S channel by scaling factor and clip (limit)
channels[1] = (channels[1] * saturationScale);

我不确定如何将修改后的饱和 channel 与 imHsv 合并,如果我这样做:
CvInvoke.Merge(channels, imhHsv); 

有错误:

cannot convert 'Emgu.CV.Image[]' to 'Emgu.CV.IInputArrayOfArrays'

最佳答案

我放了一个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);

关于c# - 如何使用 Emgu c# 去饱和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54641456/

相关文章:

c# - 获取所有具有相同颜色的像素坐标

c# - 如何从 C# 打印到 Bluebird BIP-1300 热敏打印机?

c# - 类在系统中有哪些类型的关联?如何在 UML 中最好地表示它们?

c# - 限制通用扩展方法扩展字符串

.net - 无法从 Emgucv 中的文件创建捕获

c++ - IplImage 的 cvLoadImage 工作,但 cv::Mat 的 cv::imread 不工作

c++ - Opencv CvSeq * 将整数值添加到序列中的所有点

c# - Emgu 在调用 AdaptiveThreshold 函数后意外退出

javascript - 重新加载以显示新保存的记录时,数据表未正确重新初始化

C# New bitmap() - 内存不足