【OpenCvSharp学习 图片相似度比较】

【OpenCvSharp学习 图片相似度比较】_第1张图片
D9f-3oZUIAAbLCZ.jpg

原理就是把两个图片转化为大小相同的灰度图,然后相减,再和原图比较一下
算法有不足,但是基本满足需求,希望能抛砖引玉

    float Similar(ref Mat src, ref Mat src2)
    {
        Mat gray1 = new Mat(src.Size(), src.Type()),
            gray2 = new Mat(src2.Size(), src2.Type());
        Cv2.CvtColor(src, gray1, ColorConversionCodes.BGR2GRAY);
        Cv2.CvtColor(src2, gray2, ColorConversionCodes.BGR2GRAY);

        var size = new Size(512, 512);
        using (var scaledImg1 = gray1.Resize(size))
        using (var scaledImg2 = gray2.Resize(size))
        {
            Cv2.Threshold(scaledImg1, scaledImg1, 128, 255, ThresholdTypes.BinaryInv);
            Cv2.Threshold(scaledImg2, scaledImg2, 128, 255, ThresholdTypes.BinaryInv);
            Mat res = new Mat(size, scaledImg1.Type());
            Cv2.Absdiff(scaledImg1, scaledImg2, res);
            //Cv2.ImShow("aa", scaledImg1);
            var all = (float)scaledImg1.Sum();
            var result = (float)res.Sum();
            print("result:" + (1 - result / all));
            return (1 - result / all);
        }
    }

结果相似度:


【OpenCvSharp学习 图片相似度比较】_第2张图片
捕获.JPG

第一个原图,第二个低分辨率图,第三个部分相似图,第四个完全不同图
可以看出,用这个方法可以比较方便搜索到同一个图片的不同分辨率版本,适合图片去重!

你可能感兴趣的:(【OpenCvSharp学习 图片相似度比较】)