我试图自动调整图像。我的代码如下所示:
MagickImage image = new MagickImage(stream);
image.AutoLevel(Channels.RGB);
稍后在代码中我将图像发送到网络回复。 出于某种原因,此代码对图像没有影响。它看起来与原始版完全相同。如果我改为:
MagickImage image = new MagickImage(stream);
image.Posterize(2);
然后我清楚地看到应用过滤器。
AutoLevel我缺少什么?
更新
我试过这段代码:
var image1 = Image.Clone();
Image.AutoLevel(Channels.RGB);
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared);
并且diff的值为0.0,而使用此代码(并使用相同的图像):
var image1 = Image.Clone();
Image.Equalize();
var diff = Image.Compare(image1, ErrorMetric.RootMeanSquared);
diff的值为0.315
答案 0 :(得分:0)
AutoLevel
的效果可能不明显,具体取决于您的输入图像。我使用以下代码进行了快速测试:
using (MagickImage imageA = new MagickImage("logo:"))
{
imageA.Write(@"c:\imageA.jpg")
imageA.AutoLevel(Channels.Default);
using (MagickImage imageB = new MagickImage("logo:"))
{
double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared);
Assert.AreNotEqual(0.0, difference);
imageB.Write(@"c:\imageB.jpg")
}
}
此测试通过,但差异的值非常小。这意味着当您用眼睛比较图像时,您可能无法找到很大的差异。
以下是一个示例,它将向您显示AutoLevel
方法在您使用其他输入图像时执行某些操作。
using (MagickImage imageA = new MagickImage("gradient:gray70-gray30", 150, 100))
{
imageA.Write(@"c:\imageA.jpg")
imageA.AutoLevel(Channels.Default);
using (MagickImage imageB = new MagickImage("gradient:gray70-gray30", 150, 100))
{
double difference = imageA.Compare(imageB, ErrorMetric.RootMeanSquared);
Assert.AreNotEqual(0.0, difference);
imageB.Write(@"c:\imageB.jpg")
}
}