<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#對比圖片相似度

      第一步 縮小圖片尺寸

              將圖片縮小到8x8的尺寸, 總共64個像素. 這一步的作用是去除各種圖片尺寸和圖片比例的差異, 只保留結構、明暗等基本信息.

      第二步 轉為灰度圖片

               將縮小后的圖片, 轉為64級灰度圖片.

      第三步 計算灰度平均值

               計算圖片中所有像素的灰度平均值

      第四步 比較像素的灰度

              將每個像素的灰度與平均值進行比較, 如果大于或等于平均值記為1, 小于平均值記為0.

      第五步 計算哈希值

               將上一步的比較結果, 組合在一起, 就構成了一個64位的二進制整數, 這就是這張圖片的指紋.

      第六步 對比圖片指紋

              得到圖片的指紋后, 就可以對比不同的圖片的指紋, 計算出64位中有多少位是不一樣的. 如果不相同的數據位數不超過5, 就說明兩張圖片很相似, 如果大于10, 說明它們是兩張不同的圖片.

       

       

       

      using  System;
      using  System.IO;
      using  System.Drawing;
       
      namespace  SimilarPhoto
      {
           class  SimilarPhoto
           {
               Image SourceImg;
       
               public  SimilarPhoto( string  filePath)
               {
                   SourceImg = Image.FromFile(filePath);
               }
       
               public  SimilarPhoto(Stream stream)
               {
                   SourceImg = Image.FromStream(stream);
               }
       
               public  String GetHash()
               {
                   Image image = ReduceSize();
                   Byte[] grayValues = ReduceColor(image);
                   Byte average = CalcAverage(grayValues);
                   String reslut = ComputeBits(grayValues, average);
                   return  reslut;
               }
       
               // Step 1 : Reduce size to 8*8
               private  Image ReduceSize( int  width = 8,  int  height = 8)
               {
                   Image image = SourceImg.GetThumbnailImage(width, height, () => {  return  false ; }, IntPtr.Zero);
                   return  image;
               }
       
               // Step 2 : Reduce Color
               private  Byte[] ReduceColor(Image image)
               {
                   Bitmap bitMap =  new  Bitmap(image);
                   Byte[] grayValues =  new  Byte[image.Width * image.Height];
       
                   for ( int  x = 0; x<image.Width; x++)
                       for  ( int  y = 0; y < image.Height; y++)
                       {
                           Color color = bitMap.GetPixel(x, y);
                           byte  grayValue = ( byte )((color.R * 30 + color.G * 59 + color.B * 11) / 100);
                           grayValues[x * image.Width + y] = grayValue;
                       }
                   return  grayValues;
               }
       
               // Step 3 : Average the colors
               private  Byte CalcAverage( byte [] values)
               {
                   int  sum = 0;
                   for  ( int  i = 0; i < values.Length; i++)
                       sum += ( int )values[i];
                   return  Convert.ToByte(sum / values.Length);
               }
       
               // Step 4 : Compute the bits
               private  String ComputeBits( byte [] values,  byte  averageValue)
               {
                   char [] result =  new  char [values.Length];
                   for  ( int  i = 0; i < values.Length; i++)
                   {
                       if  (values[i] < averageValue)
                           result[i] =  '0' ;
                       else
                           result[i] =  '1' ;
                   }
                   return  new  String(result);
               }
       
               // Compare hash
               public  static  Int32 CalcSimilarDegree( string  a,  string  b)
               {
                   if  (a.Length != b.Length)
                       throw  new  ArgumentException();
                   int  count = 0;
                   for  ( int  i = 0; i < a.Length; i++)
                   {
                       if  (a[i] != b[i])
                           count++;
                   }
                   return  count;
               }
           }
      }

      posted on 2021-10-16 13:24  八度空間  閱讀(2100)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 狠狠色综合久久狠狠色综合 | 男女动态无遮挡动态图| 四虎永久在线精品无码视频| 国产一区在线播放无遮挡| 成人av专区精品无码国产| 国产大尺度一区二区视频| 国产精品久久久久孕妇| 麻豆a级片| 97久久精品人人做人人爽| 欧美成人精品手机在线| 精品国产一区二区亚洲人| 国产亚洲精品AA片在线播放天| 日产无人区一线二码三码2021| 内射老妇bbwx0c0ck| 欧美精品在线观看视频| 黑龙江省| 精品久久久bbbb人妻| 精品无码国产一区二区三区av| 妺妺窝人体色www聚色窝仙踪| 国产精品美女AV免费观看| 国产精品久久蜜臀av| 亚洲精品国产熟女久久久| 久久精品国产国产精品四凭| 大屁股肥熟女流白浆| 麻豆蜜桃av蜜臀av色欲av| 強壮公弄得我次次高潮A片| 国产欧美日韩精品a在线观看 | 99久久精品国产一区二区| 东方四虎av在线观看| 国产成人啪精品视频免费网| 亚洲精品一区二区动漫| 东京热人妻丝袜无码AV一二三区观| 四虎国产精品免费久久| 国产免费网站看v片元遮挡| 国产精品免费AⅤ片在线观看 | 日韩国产中文字幕精品| 国产自国产自愉自愉免费24区| 日韩精品卡1卡2日韩在线| 欧美丝袜高跟鞋一区二区| 他掀开裙子把舌头伸进去添视频| 无码国产精品一区二区免费虚拟vr|