使用OpenCvSharp如何实现将垫对象像素化

  介绍

本篇文章为大家展示了使用OpenCvSharp如何实现将垫对象像素化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

自定义一个垫对象,然后输出像素值(像素值基本都在0 - 255之间,图像为三通道)
<强>代码

公共静态孔隙F1 ()
  {
  标量s=新的标量(0,0,255);//定义一个三通道颜色(红色)
  垫m=新垫(100、100、MatType。CV_8UC3 s);//矩阵数据类型(深度和通道数)MatType/*
  *小图像的每一个像素值我们都是知道的,可以输出查看,验证算法正确性,然后在跑大图
  *///打印100 * 100席对象像素值
  for (int i=0;我& lt;m.Height;我+ +)
  {
  for (int j=0;j & lt;m.Width;j + +)
  {
  Vec3b颜色=m.Get (i, j);//新Vec3b ();颜色通道类型(字节的三元组),直接视同得到泛型方法返回指定类型//单独获取指定通道像素//颜色。Item0=m.Get (i, j) .Item0;//R//颜色。Item1=m.Get (i, j) .Item1;//G//颜色。第二条=m.Get (i, j) .Item2;//B
  
  Console.Write(颜色。Item0 +“;“;+颜色。Item1 +“;“;+ color.Item2);
  Console.WriteLine (“;“);//输出一个换行
  }
  
  }
  
  使用(新窗口(“M" WindowMode。AutoSize, m))
  {
  Cv2.WaitKey (0);
  }
  
  }

使用OpenCvSharp如何实现将垫对象像素化”> <br/> </p> <p> 100 * 100个像素大小的图像不是很大,颜色在代码值指定了(0,0255)三通道的颜色值,打印出来都只是(0,0255年)。<br/>下面读取一张彩色图片试一下:</p> <pre class=公共静态孔隙F1 (string路径)   {//标量s=新的标量(0,0,255);//垫m=新垫(100、100、MatType。CV_8UC3 s);//矩阵数据类型(深度和通道数)MatType   垫m=新垫(路径,ImreadModes。AnyColor | ImreadModes.AnyDepth);/*   *小图像的每一个像素值我们都是知道的,可以输出查看,验证算法正确性,然后在跑大图   *///打印100 * 100席对象像素值   for (int i=0;我& lt;m.Height;我+ +)   {   for (int j=0;j & lt;m.Width;j + +)   {   Vec3b颜色=m.Get (i, j);//新Vec3b ();颜色通道类型(字节的三元组),直接视同得到泛型方法返回指定类型//单独获取指定通道像素//颜色。Item0=m.Get (i, j) .Item0;//R//颜色。Item1=m.Get (i, j) .Item1;//G//颜色。第二条=m.Get (i, j) .Item2;//B      Console.Write(颜色。Item0 +“;“;+颜色。Item1 +“;“;+ color.Item2);   Console.WriteLine (“;“);//输出一个换行   }      }   Console.WriteLine(“图像高度:{0}“,m.Height);   Console.WriteLine(“图像宽度:{0}“,m.Width);   使用(新窗口(“M" WindowMode。AutoSize, m))   {   Cv2.WaitKey (0);   }      }

使用OpenCvSharp如何实现将垫对象像素化”> <br/> </p> <p>这张图比较大,输出像素要费点时间,最后输出了图像的高度和宽度480 * 512=245760多个像素点。像素点的值都在0——255之间且是正数。</p> <p> </p> <p> <强>代码</强>在c#中使用指针方法要加安全,主要函数也要加</p> <pre class=安全静态void Main (string [] args)   {   字符串imagePath=@" E: \ \ lenna.png"形象;//图片加载路径      Function1 (imagePath);   }

///& lt; summary>///操作指针要加不安全///& lt;/summary>
  不安全的公共静态空Function1 (string路径)
  {
  垫src=https://www.yisu.com/zixun/new垫(路径,ImreadModes.AnyColor);
  如果(src.Empty())//判断垫对象是否为空,不过在c#中好像没的用,因为在垫对象初始化的时候找不到图片就直接抛出异常了,但是c++中可以用来判断。
  {
  Console.WriteLine(“加载图像出错”);
  返回;
  }/*
  c++:
  垫dst;
  dst=垫(src.Size (), src.Type ());
  dst=标量(127、0255);
  *///标量s=新的标量(127,0,255);//创建一个颜色标量(红色)c#中是一个对象//垫dst=new垫(src.Size (), src.Type (), s);//创建一个与src的大小和类型一直的图片矩阵//垫dst=src.Clone ();//克隆:得到一个完全拷贝的对象
  
  新垫垫dst=();
  src.CopyTo (dst);//拷贝一个与克隆类似,但是dst必须先新出的来//Cv2。CvtColor (dst src ColorConversionCodes.BGRA2GRAY);//转为灰度图
  控制台。WriteLine (“InputImage颜色通道:{0}”,src.Channels ());//颜色通道数
  控制台。WriteLine(“创建颜色通道:{0}”,dst.Channels ());//颜色通道数//指针获取值(根据下标),第一个像素值
  IntPtr c=dst.Ptr (0);//垫对象的Ptr方法:返回指向指定矩阵行的指针。
  c1=(字节字节* *)c;//像素值在c#中是字节类型,在c++中是uchar类型//字节* cc=(字节*)dst.Ptr (0);
  控制台。WriteLine(“第一个像素值:{0}”,* c1);
  
  int行=dst.Rows;//行
  int clo=dst.Cols;//列
  控制台。WriteLine(“行:{0};关口:{1}”,行,clo);
  使用(新窗口(“创建”,WindowMode。FreeRatio, dst))
  使用(新窗口(“InputImage”, WindowMode。FreeRatio, src))
  {
  Cv2.WaitKey (0);
  }
  }

使用OpenCvSharp如何实现将垫对象像素化