C# 中图像过滤的高速性能

2023-12-11

我有位图。我想对我的位图应用中值过滤器。但我不能使用 GetPixel() 和 SetPixel(),因为速度对我来说非常重要。我需要非常快速的方法来做到这一点。也许可以通过Graphics.DrawImage(Image, Point[], Rectangle, GraphicsUnit, ImageAttributes).

中值滤波器之后,我想应用二值化滤波器(对于每个像素计算亮度:B=0.299*R+0.5876*G+0.114B,如果亮度小于阈值(阈值是[0...255]中我的任务的参数)那么结果图像中我的像素值为 1,否则 - 0)二值化滤波器的速度对我来说也很重要


刚刚找到这个链接:在 .NET (C#) 中对图像进行灰度化的快速方法

/// <summary>
/// Grayscales a given image.
/// </summary>
/// <param name="image">
/// The image that is transformed to a grayscale image.
/// </param>
public static void GrayScaleImage(Bitmap image)
{
    if (image == null)
        throw new ArgumentNullException("image");

    // lock the bitmap.
    var data = image.LockBits(
                  new Rectangle(0, 0, image.Width, image.Height), 
                  ImageLockMode.ReadWrite, image.PixelFormat);
    try
    {
        unsafe
        {
            // get a pointer to the data.
            byte* ptr = (byte*)data.Scan0;

            // loop over all the data.
            for (int i = 0; i < data.Height; i++)
            {
                for (int j = 0; j < data.Width; j++)
                {
                    // calculate the gray value.
                    byte y = (byte)(
                        (0.299 * ptr[2]) + 
                        (0.587 * ptr[1]) + 
                        (0.114 * ptr[0]));

                    // set the gray value.
                    ptr[0] = ptr[1] = ptr[2] = y;

                    // increment the pointer.
                    ptr += 3;
                }

                // move on to the next line.
                ptr += data.Stride - data.Width * 3;
            }
        }
    }
    finally
    {
        // unlock the bits when done or when 
        // an exception has been thrown.
        image.UnlockBits(data);
    }
}

EDIT:查看更多信息:

  1. 使用LockBits方法访问图像数据
  2. 灰度和颜色矩阵
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中图像过滤的高速性能 的相关文章

  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 处理右值时的 insert 与 emplace

    std string myString std unordered set
  • SecurityAction.RequestMinimum 在 .Net 4.0 中已过时

    最近 我们的 Net 客户端库正在升级以针对 Net 4 0 进行编译 将目标框架更改为4 0后 应用程序出现一些编译错误 In AssemblyInfo cs assembly SecurityPermission SecurityAct
  • 假装 .NET 字符串是值类型

    在 NET 中 字符串是不可变的 并且是引用类型变量 这通常会让新的 NET 开发人员感到惊讶 因为他们的行为可能会将它们误认为是值类型对象 然而 除了使用实践StringBuilder对于长连接 尤其是 在循环中 在实践中是否有任何理由需
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • 结构数组 - 初始化错误

    我在这里创建一些数据结构 使用 MFC 在 MS Visual C 6 0 中编译 是的 它很旧 struct SOpcodeData BYTE m byDataType DWORD m dwMinValue DWORD m dwMaxVa
  • 如何删除数据框中同时出现在两列中相同的行?

    我有一个数据框 DF1 Id1 Id2 0 286 409 1 286 257 2 409 286 3 257 183 在这个 DF 中 对我来说行286 409 and 409 286是一样的 我只想保留其中一行 我所做的所有这一切都是使
  • 事件处理程序是否会阻止垃圾收集的发生?

    如果我有以下代码 MyClass pClass new MyClass pClass MyEvent MyFunction pClass null pClass 会被垃圾回收吗 或者它会在事件发生时继续触发事件吗 我需要执行以下操作才能允许
  • 存储访问框架,takePersistableUriPermission

    在我的应用程序中 用户可以选择下载目录 如果他选择外部可拆卸SD 卡 不是模拟的 SD 卡 而是内存 例如真正的物理 microSD 卡 从 Android 4 4 开始我只能使用以下命令对其进行写入SAF 存储访问框架 我已经弄清楚如何使
  • 同一模型中的 has_many 和 Belongs_to

    我有一个模型用户 它有一个 角色 属性 可以填充 员工 或 经理 现在我想要一种关系 其中经理拥有 许多员工 而员工属于 经理 是否可以在同一模型中执行此操作 我可以想到这样的事情 has many employees class name
  • 按顺序进行控制

    我正在使用表单的文本字段创建一个 XML 文件 当我使用For Each loop For each Ctrl in Me Controls dosomething Next 它不按顺序排列它们 也就是说 它首先需要TextBox在中间 然
  • MySQL:选择查询执行和结果获取时间随着连接数量的增加而增加

    我的服务器应用程序通过单独的线程与 MySQL 建立多个连接 每个连接都会触发一个SELECT查询并获取结果 然后应用程序将其返回给其连接的用户 我正在使用InnoDB 令我惊讶的是 我发现很奇怪的是 如果我增加 MySQL 的连接数量 查
  • 取消选择后无法再次选择选项

    我有一个输入 id quickS 和一个选择 id lbSLI L 元素 如下所示 我的 Jquery 代码如下 document ready function quickS keyup function lbSLI L option se
  • 如何在 Python 3 的方法装饰器中调用 super ? [复制]

    这个问题在这里已经有答案了 我该如何填写 def ensure finished iterator try next iterator except StopIteration return else raise RuntimeError
  • R 中存在错误的单纯形函数的基本示例

    早上好 我有一个优化问题 我无法在 R 中解决 但在 Excel 中解决 我想优化以下情况 物资和人员的运输 航空公司x1可运输50吨物资和500人航空公司x2可运输150吨物资和250人 50x1 150x2 gt 900 gt 材料运输
  • NUnit 在 TFS 构建中加载失败

    我遇到了 构建部分成功 问题 并出现此错误 NUnit 无法加载 e Builds 184 CSTax 706USServices Test bin Calc Tests dll 但该项目中的所有单元测试都运行并且通过 全绿色 搭建环境 1
  • 如何使用 Jpackage 为 JavaFX 应用程序制作分发格式

    由于 jar 不再是分发 JavaFX 项目的最佳格式 我愿意使用 JPackage 工具来代替 但在阅读这篇文章后 https stackoverflow com a 68823040 4262407 我最终有多个问题 但首先 我只是想确
  • 在java中使用GZIPOutputStream发送压缩块

    我试图通过 java 套接字发送压缩的 HTML 文件 但浏览器显示一个空的 HTML 文件 问题是 当我尝试发送未压缩的 HTML 时 发现一切正常 是的 我确实相应地修改了 HTTP 标头 private void sendRespon
  • ASP Classic 无法在 IIS 7 上使用 FileSystemObject 访问虚拟目录

    我有一个经典的 ASP 网站 我们已从 IIS 6 迁移到 Win2k8 和 IIS 7 在网站文件夹结构中 有一个名为 Products 的虚拟目录 其中包含物理存储在同一服务器上其他位置的 JPG 在 Web 浏览器中 任何产品 JPG
  • 验证 HTML 中的信息 - 代码定位

    我无法让代码验证正常工作 我已经编写了姓名和电子邮件地址的验证 但是 我不知道在哪里插入命令以便在我的主 html 中调用 php 代码 我想我必须在这样的表单中添加一个操作 div class logo div div class log
  • 启动 angular.bootstrap 后取消引导? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 尝试重新编译角度应用程序时遇到问题 有没有办法在调用 angular bootstrap 后取消引导 一旦我在已经引导的情况下执行 angular bootstrap 就会导致错误 T
  • 最小化时 pywin32 / pywinauto 在远程桌面中无法正常工作

    我有一个 Jenkins 管道 它在远程服务器中执行一个程序 该服务器使用 pywin 来操作应用程序以进行功能测试 当我打开远程桌面时 我的应用程序运行得很好 但是当我关闭远程桌面并从 Jenkins 运行它时 应用程序就会丢失 我所做的
  • PHP 短三元(“Elvis”)运算符与空合并运算符

    有人可以解释一下之间的区别吗三元运算符简写 and 空合并运算符 在 PHP 中 他们什么时候表现不同 什么时候表现相同 如果真的发生了 a b VS a b Elvis 如果第一个参数包含 true ish 值 则返回它 查看哪些值被认为
  • 如何将上传文件保存到另一台服务器

    我目前正在使用 django 现在我需要将用户上传的文件保存到另一台服务器 该服务器不是为 django 应用程序提供服务的服务器 该文件将保存到文件系统而不是数据库 有人可以告诉我该怎么做吗 默认 Django 行为是将文件保存在文件系统
  • C# 中图像过滤的高速性能

    我有位图 我想对我的位图应用中值过滤器 但我不能使用 GetPixel 和 SetPixel 因为速度对我来说非常重要 我需要非常快速的方法来做到这一点 也许可以通过Graphics DrawImage Image Point Rectan