c#调用OpenCV开发简易版美图工具【推荐】

  

  

在c#调用OpenCV其实非常简单,因为c#中有很多OpenCV的开源类库。

  

本文主要介绍在WPF项目中使用<代码> OpenCVSharp3-AnyCPU 开源类库处理图片、下面我们先来做开发前的准备工作。

  

  

首先,我们先创建一个WPF项目。

  

然后,在Nuget上搜索OpenCVSharp,如下图:

  

 C #调用OpenCV开发简易版美图工具【推荐】“> </p>
  <p>接着,我们选择OpenCVSharp3-AnyCPU选项进行安装。</p>
  <p>安装了OpenCVSharp3-AnyCPU后,我们的项目会自动引入4个类库,如下图:</p>
  <p> <img src=   使用OpenCvSharp;   使用OpenCvSharp.Extensions;      

然后我们在项目中使用垫类来进行图片操作。

  

红蓝颜色通道互换

  

在OPenCV里,垫类是非常重要的,它是处理图片的入口。

  

现在,我们先做一个简单的图片操作,红蓝通道颜色互换,代码如下:

  

        垫垫=new垫(@“. . \ . . \ \ ocv02.jpg图像”,ImreadModes.Unchanged);   (var y=0;y & lt;mat.Height;y + +)   {   (var x=0;x & lt;mat.Width;x + +)   {   Vec3b颜色=mat.Get (y、x);   var temp=color.Item0;   颜色。Item0=color.Item2;//B转R   颜色。第二条=temp;//R转B   mat.Set (y、x、颜色);   }   }   var mem=mat.ToMemoryStream ();   BitmapImage bmp=new BitmapImage ();   bmp.BeginInit ();   bmp。StreamSource=mem;   bmp.EndInit ();   imgOutput。源=骨形态发生蛋白;   mat.Dispose();///该方法在垫子里被重写了,可以释放资源,可以放心调用      

效果图如下:

  

 C #调用OpenCV开发简易版美图工具【推荐】“> </p>
  <p>可以看的到,我们成功的处理了图片的红蓝通道颜色互换。</p>
  <p>现在我们再多做一些OpenCV的操作。</p>
  </p> <p>腐蚀
  <p>代码如下:</p>
  <p> </p>
  
  <pre类=   使用(var src=https://www.yisu.com/zixun/new垫(@“. . \ . . \ \ ocv02.jpg图像”,ImreadModes。AnyDepth | ImreadModes.AnyColor))   {   Cv2。侵蚀(src, src,新垫());   var mem=src.ToMemoryStream ();   BitmapImage bmp=new BitmapImage ();   bmp.BeginInit ();   bmp。StreamSource=mem;   bmp.EndInit ();   imgOutput。源=骨形态发生蛋白;   }      

效果图如下:

  

 C #调用OpenCV开发简易版美图工具【推荐】“> </p>
  </p> <p>反转
  <p>代码如下:</p>
  <p> </p>
  
  <pre类=   使用(var src=https://www.yisu.com/zixun/new垫(@“. . \ . . \ \ ocv02.jpg图像”,ImreadModes。AnyDepth | ImreadModes.AnyColor))   {   使用(var dst=new垫())//复制以后处理   {   Cv2。BitwiseNot (src, dst,新垫());   var mem=dst.ToMemoryStream ();   BitmapImage bmp=new BitmapImage ();   bmp.BeginInit ();   bmp。StreamSource=mem;   bmp.EndInit ();   imgOutput。源=骨形态发生蛋白;   }   }      

效果图如下:

  

 C #调用OpenCV开发简易版美图工具【推荐】“> </p>
  <p>亮度——变暗</p>
  <p>代码如下:</p>
  <p> </p>
  
  <pre类=   BitmapImage bmpSource=new BitmapImage(新Uri(“包://用途:,,,/图片/ocv02.jpg”));   垫垫=bmpSource.ToMat ();   (var y=0;y & lt;mat.Height;y + +)   {   (var x=0;x & lt;mat.Width;x + +)   {   Vec3b颜色=mat.Get (y、x);   int item0=color.Item0;   int item1=color.Item1;   int第二条=color.Item2;   #区域变暗   item0 -=60;   item1 -=60;   第二条-=60;   如果(item0 & lt;0)   item0=0;   如果(item1 & lt;0)   item1=0;   如果(第二条& lt;0)   第二条=0;   # endregion   #区域变亮//item0 +=80;//item1 +=80;//第二条+=80;//如果(item0比;255)//item0=255;//如果(item1比;255)//item1=255;//如果(第二条比;255)//第二条=255;   # endregion      颜色。Item0 Item0=(字节);   颜色。Item1 Item1=(字节);   颜色。第二条=(字节)第二条;   mat.Set (y、x、颜色);   }   }   var mem=mat.ToMemoryStream ();   BitmapImage bmp=new BitmapImage ();   bmp.BeginInit ();   bmp。StreamSource=mem;   bmp.EndInit ();   imgOutput。源=骨形态发生蛋白;   mat.Dispose();///该方法在垫子里被重写了,可以释放资源,可以放心调用

c#调用OpenCV开发简易版美图工具【推荐】