比较图片相似度 用C语言编写更好,【OpenCvSharp学习 图片相似度比较】

cead340fc8b2

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);

}

}

结果相似度:

cead340fc8b2

捕获.JPG

第一个原图,第二个低分辨率图,第三个部分相似图,第四个完全不同图

可以看出,用这个方法可以比较方便搜索到同一个图片的不同分辨率版本,适合图片去重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值