15

创建棕褐色调需要哪些基本操作?我的参考点是 perl imagemagick 库,因此我可以轻松使用任何基本操作。我试图量化(使其成为灰度),着色,然后增强图像,但它仍然有点模糊。

4

4 回答 4

26

我在此处的回答中提供了 C# 中的棕褐色转换器的示例代码:此棕褐色调转换算法有什么问题?

该算法来自this page,每个输入像素颜色通过以下方式进行转换:

outputRed = (inputRed * .393) + (inputGreen *.769) + (inputBlue * .189)
outputGreen = (inputRed * .349) + (inputGreen *.686) + (inputBlue * .168)
outputBlue = (inputRed * .272) + (inputGreen *.534) + (inputBlue * .131)

如果这些输出值中的任何一个大于 255,您只需将其设置为 255。这些特定值是 Microsoft 推荐的棕褐色调值。

于 2012-02-25T23:43:13.713 回答
4

这是在 C# 中,但是基本概念是相同的。您可能能够将其转换为 perl。

  private void SepiaBitmap(Bitmap bmp)
{
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
        System.Drawing.Imaging.PixelFormat.Format32bppRgb);

    IntPtr ptr = bmpData.Scan0;

    int numPixels = bmpData.Width * bmp.Height;
    int numBytes = numPixels * 4;
    byte[] rgbValues = new byte[numBytes];

    System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, numBytes);
    for (int i = 0; i < rgbValues.Length; i += 4)
    {
        rgbValues[i + 2] = (byte)Math.Min((.393 * red) + (.769 * green) + (.189 * (blue)), 255.0); //red
        rgbValues[i + 1] = (byte)Math.Min((.349 * red) + (.686 * green) + (.168 * (blue)), 255.0); //green
        rgbValues[i + 0] = (byte)Math.Min((.272 * red) + (.534 * green) + (.131 * (blue)), 255.0); //blue
        if ((rgbValues[i + 2]) > 255)
        {
            rgbValues[i + 2] = 255; 
        }

        if ((rgbValues[i + 1]) > 255)
        {
            rgbValues[i + 1] = 255;
        }
        if ((rgbValues[i + 0]) > 255)
        {
            rgbValues[i + 0] = 255;
        }
    }

    System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, numBytes);
    this.Invalidate();
    bmp.UnlockBits(bmpData);

}
于 2012-02-26T06:28:18.790 回答
1

如果您使用 imagemagic 命令行,这很容易。

http://www.imagemagick.org/script/convert.php

转换时使用“-sepia-tone threshold”参数。

奇怪的是,PerlMagick API 似乎没有包含直接执行此操作的方法:

http://www.imagemagick.org/script/perl-magick.php

...并且没有提及任何棕褐色方法。

于 2009-06-30T02:20:40.850 回答
1

看看它是如何在 AForge.NET 库中实现的,C# 代码在这里

基础似乎是

  • 将其转换为 YIQ 颜色空间
  • 修改它
  • 转换回 RGB

完整的算法在源代码中,另外解释了 RGB -> YIQ 和 YIQ -> RGB 转换。

于 2010-01-18T12:14:36.033 回答