OpenCVSharp 4.5 直方图对比

用OpenCVSharp 跑一遍OpenCV官方教程

原官方教程链接:OpenCV: Histogram Comparison

核心函数:compareHist 

using System;
using OpenCvSharp;

namespace ConsoleApp1
{
    class tutorial21 : ITutorial
    {
        public void Run()
        {

            using (Mat src_base = new Mat("I:\\csharp\\images\\hand.jpg", ImreadModes.AnyColor))
            using (Mat src_test1 = new Mat("I:\\csharp\\images\\hand_test1.jpg", ImreadModes.AnyColor))
            using (Mat src_test2 = new Mat("I:\\csharp\\images\\hand_test2.jpg", ImreadModes.AnyColor))
            using (Mat hsv_base = new Mat())
            using (Mat hsv_test1 = new Mat())
            using (Mat hsv_test2 = new Mat())
            {
                Cv2.CvtColor(src_base, hsv_base, ColorConversionCodes.BGR2HSV);
                Cv2.CvtColor(src_test1, hsv_test1, ColorConversionCodes.BGR2HSV);
                Cv2.CvtColor(src_test2, hsv_test2, ColorConversionCodes.BGR2HSV);

                Mat hsv_half_down = hsv_base[new Range(hsv_base.Rows / 2, hsv_base.Rows), new Range(0, hsv_base.Cols)];
                int h_bins = 50, s_bins = 60;
                int[] histSize = { h_bins, s_bins };

                // hue varies from 0 to 179, saturation from 0 to 255
                float[] h_ranges = { 0, 180 };
                float[] s_ranges = { 0, 256 };

                float[][] ranges = { h_ranges, s_ranges };

                // Use the 0-th and 1-st channels
                int[] channels = { 0, 1 };
                Mat hist_base = new Mat();
                Mat hist_half_down = new Mat();
                Mat hist_test1 = new Mat();
                Mat hist_test2 = new Mat();

                Cv2.CalcHist(new Mat[] { hsv_base }, channels, null, hist_base, 2, histSize, ranges, true, false);
                Cv2.Normalize(hist_base, hist_base, 0, 1, NormTypes.MinMax, -1, null);
                Cv2.CalcHist(new Mat[] { hsv_half_down }, channels, null, hist_half_down, 2, histSize, ranges, true, false);
                Cv2.Normalize(hist_half_down, hist_half_down, 0, 1, NormTypes.MinMax, -1, null);
                Cv2.CalcHist(new Mat[] { hsv_test1 }, channels, null, hist_test1, 2, histSize, ranges, true, false);
                Cv2.Normalize(hist_test1, hist_test1, 0, 1, NormTypes.MinMax, -1, null);
                Cv2.CalcHist(new Mat[] { hsv_test2 }, channels, null, hist_test2, 2, histSize, ranges, true, false);
                Cv2.Normalize(hist_test2, hist_test2, 0, 1, NormTypes.MinMax, -1, null);

                Console.WriteLine("Method \t Perfect \t Base - Half \t Base - Test(1) \t Base - Test(2)");
                for (int compare_method = 0; compare_method < 4; compare_method++)
                {
                    double base_base = Cv2.CompareHist(hist_base, hist_base, (HistCompMethods)compare_method);
                    double base_half = Cv2.CompareHist(hist_base, hist_half_down, (HistCompMethods)compare_method);
                    double base_test1 = Cv2.CompareHist(hist_base, hist_test1, (HistCompMethods)compare_method);
                    double base_test2 = Cv2.CompareHist(hist_base, hist_test2, (HistCompMethods)compare_method);
                    Console.WriteLine("{0}\t{1:#.000}\t{2:#.000}\t{3:#.000}\t{4:#.000} ",
                        ((HistCompMethods)compare_method).ToString(),
                        base_base,
                        base_half,
                        base_test1,
                        base_test2
                        );
                }
                Console.ReadKey();
                Console.WriteLine("Done");
            }
        }
    }
}

输入图片

输出:

在EXCEL里看清楚一点:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值