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

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

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

      OpenCV 直方圖和歸一化

      直方圖可以反映圖片的整體統計信息, 使用函數 CalcHist() 實現.
      但CalcHist() 統計出的數量信息和圖像大小相關, 如果要剔除圖像大小因素, 需要做歸一化處理, 歸一化處理后的信息, 反映出各個顏色值得占比情況, 這樣更方便不同size圖像做對比, 歸一化的函數為 Normalize().

              /// <summary>
              /// computes the joint dense histogram for a set of images.
              /// </summary>
              /// <param name="images">要統計直方圖的Mat</param>
              /// <param name="channels">需要統計的通道Id, 為了理解方便, 一般僅統計一個通道</param>
              /// <param name="mask">掩碼Mat, 如果是整張圖片統計直方圖, 傳null即可</param>
              /// <param name="hist">統計后的hist mat</param>
              /// <param name="dims">輸出直方圖的維度, 灰度為1, 彩色為3</param>
              /// <param name="histSize">直方圖橫坐標的區間數, 即直方圖每一維數組的大小</param>
              /// <param name="ranges">執直方圖每個bin上下浮動的數值范圍</param>
              /// <param name="uniform">直方圖是否均勻, 一般取值為true</param>
              /// <param name="accumulate">累計標志, 多次進行直方圖統計時是否需要累計, 一般取值為false</param>
              public static void CalcHist(Mat[] images, 
                  int[] channels, InputArray? mask,
                  OutputArray hist, int dims, int[] histSize,
                  Rangef[] ranges, bool uniform = true, bool accumulate = false)
              {}  
      
              /// <summary>
              /// scales and shifts array elements so that either the specified norm (alpha) 
              /// or the minimum (alpha) and maximum (beta) array values get the specified values
              /// </summary>
              /// <param name="src">直方圖hist mat</param>
              /// <param name="dst">歸一化后的Mat, 歸一化前后的mat具有相同的size</param>
              /// <param name="alpha">如果beta參數為0, alpha值為歸一化后的下限值;  如果beta值>0; alpha值為歸一化后的上限值;</param>
              /// <param name="beta">如果beta>0, 即指定歸一化后的上限值</param>
              /// <param name="normType">歸一化的算法</param>
              /// <param name="dtype"> 如dtype<0, 歸一化后的數據類型同歸一化之前的數據類型, 一般取-1即可</param>
              /// <param name="mask">掩碼區</param>
              public static void Normalize(InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
                  NormTypes normType = NormTypes.L2, int dtype = -1, InputArray? mask = null)
      

      歸一化有兩類算法:

      • 范圍歸一化, 上下限為[alpha, beta] , 算法需要使用 norm_type= NormTypes.MinMax, 函數會進行比例變換, 將數值從[min(src),max(src)]變換到[alpha,beta]區間.
      • 范數歸一化, 上下限為 [0, alpha],
        . 算法取值為NORM_INF,此時函數normalize()會把src矩陣所有元素的最大絕對值調整為參數alpha的值。
        . 算法取值為NORM_L1,此時函數normalize()會把src矩陣所有元素的絕對值之和調整為參數alpha的值。
        . 算法取值為NORM_L2,此時函數normalize()會把src矩陣所有元素的絕對值的平方和進行開方后的值調整為參數alpha的值。

      示例代碼

      private void calcHistTest()
      {
          string fileName = @"D:\my_workspace\opencv\images\lena2.jpg";
          var lena = Cv2.ImRead(fileName, ImreadModes.Color);
          //var lena = new Mat(500, 500, MatType.CV_8UC3, Scalar.Blue);
      
          //分離BGR通道
          Mat[] bgr = lena.Split();
      
          //分別對BGR mat進行直方圖統計
          int binCount = 256;
          Mat blueHist = new Mat();
          Cv2.CalcHist(new Mat[] { bgr[0] }, channels: new int[] { 0 },
              mask: null, hist: blueHist, dims: 1, histSize: new int[] { binCount }, ranges: new Rangef[] { new Rangef(0, 256) });
          Mat greenHist = new Mat();
          Cv2.CalcHist(new Mat[] { bgr[1] }, channels: new int[] { 0 },
              mask: null, hist: greenHist, dims: 1, histSize: new int[] { binCount }, ranges: new Rangef[] { new Rangef(0, 256) });
          Mat redHist = new Mat();
          Cv2.CalcHist(new Mat[] { bgr[2] }, channels: new int[] { 0 },
              mask: null, hist: redHist, dims: 1, histSize: new int[] { binCount }, ranges: new Rangef[] { new Rangef(0, 256) });
      
          //分別做歸一化, 歸一化到 [0,1]
          Cv2.Normalize(blueHist, blueHist, 0, 1, NormTypes.MinMax);
          Cv2.Normalize(greenHist, greenHist, 0, 1, NormTypes.MinMax);
          Cv2.Normalize(redHist, redHist, 0, 1, NormTypes.MinMax);
      
          //繪制直方圖
          int histWidth = 500;
          int histHeight = 500;
          int binWidth = histWidth / binCount;
          var histImage = new Mat(histWidth, histHeight, MatType.CV_8UC3, Scalar.Black);
          for (int i = 1; i < binCount; i++)
          {
              histImage.Line(new OpenCvSharp.Point((i - 1) * binWidth, blueHist.At<float>(i - 1) * histHeight),
                  new OpenCvSharp.Point(i * binWidth, blueHist.At<float>(i) * histHeight), Scalar.Blue);
              histImage.Line(new OpenCvSharp.Point((i - 1) * binWidth, greenHist.At<float>(i - 1) * histHeight),
                  new OpenCvSharp.Point(i * binWidth, greenHist.At<float>(i) * histHeight), Scalar.Green);
              histImage.Line(new OpenCvSharp.Point((i - 1) * binWidth, redHist.At<float>(i - 1) * histHeight),
                  new OpenCvSharp.Point(i * binWidth, redHist.At<float>(i) * histHeight), Scalar.Red);
          }
      
          //比較兩個歸一化的直方圖
          var anotherBlueHist = blueHist.Clone();
          var compareResult = Cv2.CompareHist(anotherBlueHist, blueHist, HistCompMethods.Correl);
          Console.WriteLine($"compareResult:{compareResult}");
      
          Cv2.ImShow("lena", lena);
          Cv2.ImShow("histImage", histImage);
          Cv2.WaitKey();
          Cv2.DestroyAllWindows();
      }
      

      參考:

      https://zhuanlan.zhihu.com/p/258118645
      https://blog.csdn.net/wenhao_ir/article/details/125619073
      https://blog.csdn.net/weixin_42207434/article/details/134020709
      https://blog.csdn.net/lweiyue/article/details/105775814

      posted @ 2023-11-07 07:36  harrychinese  閱讀(263)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产成人av电影在线观看第一页| 好男人官网资源在线观看| 欧美日韩亚洲国产| 高清无码爆乳潮喷在线观看| 日本韩国一区二区精品| 国产偷窥厕所一区二区| 国产无遮挡吃胸膜奶免费看| 国产精品久久久福利| 久播影院无码中文字幕| 蓝山县| 亚洲无线码一区二区三区| 玩弄漂亮少妇高潮白浆| 天堂久久久久VA久久久久| 国产精品一区二区国产馆| 久久成人国产精品免费软件| 国产欧美日韩精品丝袜高跟鞋| 中文字幕精品亚洲无线码二区| 强奷乱码欧妇女中文字幕熟女| 国产成人高清精品免费软件| 日本高清中文字幕一区二区三区| 亚洲综合一区国产精品| 中文字幕无码色综合网| 免费看的日韩精品黄色片| 草草浮力影院| 国产99视频精品免费专区| 久久一日本道色综合久久| 久久国产一区二区三区| 77se77亚洲欧美在线| 一色屋精品视频在线观看| 亚洲精品在线视频自拍| 国产不卡av一区二区| 国产女人喷潮视频免费| 国产美女直播亚洲一区色| 欧美牲交a欧美牲交aⅴ免费真| 久久久久四虎精品免费入口 | 韩国午夜福利片在线观看| 日韩av影院在线观看| 国产又爽又黄的激情视频| 免费国产好深啊好涨好硬视频| 日本高清中文字幕一区二区三区| 起碰免费公开97在线视频|