Win8Metro(C#)数字图像处理--2.26图像减法

2024-04-22 01:58

本文主要是介绍Win8Metro(C#)数字图像处理--2.26图像减法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



[函数名称]

图像减法函数SubtractionProcess(WriteableBitmap src, WriteableBitmap subSrc)

[算法说明]

 图像减法就是将两幅图像对应像素值进行减法运算,这里要求两幅图像大小最好相同。

 算法过程如下:

[函数代码]

       ///<summary>

       /// Subtraction of two images(Both of them should be in same size).

       ///</summary>

       ///<param name="src">The first source image.</param>

       ///<param name="subSrc">The second source image.</param>

       ///<returns></returns>

       publicstaticWriteableBitmap SubtractionProcess(WriteableBitmap src,WriteableBitmap subSrc)26图像减法

       {

           if (src !=null)

           {

               int w = src.PixelWidth;

               int h = src.PixelHeight;

               WriteableBitmap subImage =newWriteableBitmap(w, h);

               byte[] temp = src.PixelBuffer.ToArray();

               byte[] subTemp = subSrc.PixelBuffer.ToArray();

               byte[] dst =newbyte[w * h * 4];

               for (int i = 0; i < w; i++)

               {

                   for (int j = 0; j < h; j++)

                   {

                       dst[i * 4 + j * w * 4] = (byte)Math .Abs(temp[i * 4 + (h - 1 - j) * w * 4] - subTemp[i * 4 + (h - 1 - j) * w * 4]);

                       dst[i * 4 + 1 + j * w * 4] = (byte)Math .Abs(temp[i * 4 + 1 + (h - 1 - j) * w * 4] - subTemp[i * 4 + 1 + (h - 1 - j) * w * 4]);

                       dst[i * 4 + 2 + j * w * 4] = (byte)Math .Abs(temp[i * 4 + 2 + (h - 1 - j) * w * 4] - subTemp[i * 4 + 2 + (h - 1 - j) * w * 4]);

                       dst[i * 4 + 3 + j * w * 4] = 0;

                   }

               }

               Stream sTemp = subImage.PixelBuffer.AsStream();

               sTemp.Seek(0, SeekOrigin.Begin);

               sTemp.Write(dst, 0, w * 4 * h);

               return subImage;

           }

           else

           {

               returnnull;

           }     

       }

[图像效果]

 

这篇关于Win8Metro(C#)数字图像处理--2.26图像减法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924571

相关文章

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

C#中,decimal类型使用

在Microsoft SQL Server中numeric类型,在C#中使用的时候,需要用decimal类型与其对应,不能使用int等类型。 SQL:numeric C#:decimal

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

C# 命名管道中客户端访问服务器时,出现“对路径的访问被拒绝”

先还原一下我出现错误的情景:我用C#控制台写了一个命名管道服务器,然后用ASP.NET写了一个客户端访问服务器,运行之后出现了下面的错误: 原因:服务器端的访问权限不够,所以是服务器端的问题,需要增加访问权限。(网上很多都说是文件夹的权限不够,情况不同,不适用于我这种情况) 解决办法: (1)在服务器端相应地方添加以下代码。 PipeSecurity pse = new PipeSec

如何通过示例将旧版 C# 转换为 C# 12

随着 C# 的不断发展,每个新版本都会引入强大的新功能,从而提高语言的功能和可读性。通过从旧版本的 C# 迁移到 C# 12,您可以获得更高效、更易于维护和更具表现力的代码。 由于代码库遗留、公司限制以及对旧语言功能的熟悉,许多开发人员仍在使用旧版本的 C#。升级似乎很困难,但现代版本的 C# 具有显著的优势,例如更好的性能、增强的功能和更高的安全性。 通过增量重构、试点项目和团队培训逐步

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

音视频开发基础知识(1)——图像基本概念

像素 **像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

【Python机器学习】NMF——将NMF应用于人脸图像

将NMF应用于之前用过的Wild数据集中的Labeled Faces。NMF的主要参数是我们想要提取的分量个数。通常来说,这个数字要小于输入特征的个数(否则的话,将每个像素作为单独的分量就可以对数据进行解释)。 首先,观察分类个数如何影响NMF重建数据的好坏: import mglearn.plotsimport numpy as npimport matplotlib.pyplot as

C#启动另外一个C#程序,并传递参数

第一个程序:             using System.ComponentModel; using System.IO;         private void button1_Click(object sender, EventArgs e)         {             string target = Path.GetDirectory

WinCE的C#程序中获取当前应用程序的路径

WinCE中获取当前路径的两种方法: string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); string appPath = System.IO.Path.GetDirectoryName(System.R