如何使用 C# 中的代码进行颜色提取?

Posted

技术标签:

【中文标题】如何使用 C# 中的代码进行颜色提取?【英文标题】:How can I using code in C# for color extraction? 【发布时间】:2012-04-21 09:38:49 【问题描述】:

我需要帮助从图像中提取指定颜色(例如红色),然后裁剪包含该颜色的对象。

这部分在我的研究生项目中非常重要,它在投影仪屏幕上跟踪激光手势。

【问题讨论】:

当你说裁剪时,你的意思是......?您要删除红框吗?您想让图像中的所有红色变为白色/透明/等吗? 我的意思是用指定的颜色裁剪对象 例如图像中的红球 看看我在类似问题上给出的答案***.com/a/8774798/479512 再一次,当你说剪辑时,你的意思是什么? 【参考方案1】:

我真的不确定我是否理解正确,但这里有一个代码,它只显示图像的红色部分。

与 200 相比,您可以通过将 > 更改为

private static unsafe void OnlyRed(Bitmap bitmap, Color replacement)

    var redOffset = 0;
    var bpp = 32;
    var bytesRep = new List<byte> replacement.R, replacement.G, replacement.B;

    switch (bitmap.PixelFormat)
    
        case PixelFormat.Format24bppRgb:
            bpp = 24;
            break;
        case PixelFormat.Format32bppArgb:
            redOffset = 8;
            bytesRep.Insert(0, replacement.A);
            break;
        case PixelFormat.Format32bppRgb:
        case PixelFormat.Canonical:
            bytesRep.Add(replacement.A);
            break;
        default:
            throw new NotSupportedException("Pixel format unsupported.");
    

    var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                               ImageLockMode.ReadWrite,
                               bitmap.PixelFormat);

    var start = (byte*)data.Scan0;
    var end = start + data.Height * data.Stride;

    for (var curr = start; curr < end; curr += bpp / 8)
    
        if (curr[redOffset] > 200)
        
            continue;
        

        for (var i = 0; i < bytesRep.Count; i++)
        
            curr[i] = bytesRep[i];
        
    

    bitmap.UnlockBits(data);

用法:

var bitmap = new Bitmap("file location...");
OnlyRed(bitmap, Color.Transparent);

【讨论】:

究竟是什么不起作用?你有例外吗?结果有错吗?怎么样? 我有图像 mediafire.com/imageview.php?quickkey=ey2r55xu331gbtl 我需要 C# 中的代码找出图像中的黑色矩形,然后将区域剪裁在其中 您要求剪切红色区域,而不是黑色区域...您希望我修改代码以剪切黑色部分吗? 无论如何,它只会删除黑色区域本身。它不会将该区域识别为正方形并在其中种植作物。您现在要求的是更高级的图像处理。 总是有一个矩形吗?它总是一样大吗?一样的颜色?您希望程序如何处理您提供的图像中的弯曲矩形?真的不是直的。如果背景颜色与矩形颜色相同怎么办?如果有多个矩形怎么办?你要求的是巨大的东西,却没有提供任何东西。

以上是关于如何使用 C# 中的代码进行颜色提取?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 提取 PDF 文件中的所有文字(支持 .NET Core)

如何使用 C++ 提取图像中的 r g b 颜色分量

如何从javascript中的rgb字符串中提取颜色值[重复]

如何更改 C# 文本文件中的未知数字?

如何使用 C# 管理对一组面板的点击事件?

如何在我的 CSS 中使用存储在 JSON 中的颜色?