美文网首页机器视觉&人工智障
【OpenCvSharp学习 图片相似度比较】

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

作者: superowner | 来源:发表于2019-08-25 15:59 被阅读0次
    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);
            }
        }
    

    结果相似度:


    捕获.JPG

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

    相关文章

      网友评论

        本文标题:【OpenCvSharp学习 图片相似度比较】

        本文链接:https://www.haomeiwen.com/subject/sszhectx.html