最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#圖像邊緣檢測(cè)(Roberts)的方法

 更新時(shí)間:2015年04月24日 09:32:18   作者:滄海一粟……  
這篇文章主要介紹了C#圖像邊緣檢測(cè)(Roberts)的方法,涉及C#操作圖像的相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了C#圖像邊緣檢測(cè)(Roberts)的方法。分享給大家供大家參考。具體如下:

//定義roberts算子函數(shù)
private static Bitmap robert(Bitmap a)
{
 int w = a.Width;
 int h = a.Height;
 try
 {
  Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle
   (0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle
   (0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  unsafe
  {
   byte* pIn = (byte*)srcData.Scan0.ToPointer();
   byte* pOut = (byte*)dstData.Scan0.ToPointer();
   byte* p;
   int stride = srcData.Stride;
   for (int y = 0; y < h; y++)
   {
   for (int x = 0; x < w; x++)
   {
    //邊緣八個(gè)點(diǎn)像素不變
    if (x == 0 || x == w - 1 || y == 0 || y == h - 1)
    {
    pOut[0] = pIn[0];
    pOut[1] = pIn[1];
    pOut[2] = pIn[2];
    }
    else
    {
    int r0, r5, r6, r7;
    int g5, g6, g7, g0;
    int b5, b6, b7, b0;
    double vR, vG, vB;
    //右
    p = pIn + 3;
    r5 = p[2];
    g5 = p[1];
    b5 = p[0];
    //左下
    p = pIn + stride - 3;
    r6 = p[2];
    g6 = p[1];
    b6 = p[0];
    //正下
    p = pIn + stride;
    r7 = p[2];
    g7 = p[1];
    b7 = p[0];
    //中心點(diǎn)
    p = pIn;
    r0 = p[2];
    g0 = p[1];
    b0 = p[0];
    vR = (double)(Math .Abs (r0-r5)+Math .Abs ( r5-r7));
    vG = (double)(Math.Abs(g0 - g5) + Math.Abs(g5 - g7));
    vB = (double)(Math.Abs(b0 - b5) + Math.Abs(b5 - b7));
    if (vR > 0)
    {
     vR = Math.Min(255, vR);
    }
    else
    {
     vR = Math.Max(0, vR);
    }
    if (vG > 0)
    {
     vG = Math.Min(255, vG);
    }
    else
    {
     vG = Math.Max(0, vG);
    }
    if (vB > 0)
    {
     vB = Math.Min(255, vB);
    }
    else
    {
     vB = Math.Max(0, vB);
    }
    pOut[0] = (byte)vB;
    pOut[1] = (byte)vG;
    pOut[2] = (byte)vR;
    }
    pIn += 3;
    pOut += 3;
   }
   pIn += srcData.Stride - w * 3;
   pOut += srcData.Stride - w * 3;
   }
  }
  a.UnlockBits(srcData);
  dstBitmap.UnlockBits(dstData);
  return dstBitmap;
 }
 catch
 {
  return null;
 }
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

乌兰县| 宜兰市| 兴海县| 江津市| 峨山| 新丰县| 栾城县| 林口县| 荆门市| 涪陵区| 中方县| 仁化县| 广丰县| 和静县| 长治县| 平遥县| 古交市| 钦州市| 利津县| 弋阳县| 烟台市| 静乐县| 三江| 繁峙县| 丰原市| 得荣县| 东明县| 台中县| 宜州市| 即墨市| 虹口区| 江安县| 延吉市| 拉孜县| 大城县| 岳阳县| 皮山县| 博兴县| 泸定县| 洛南县| 壶关县|