利用opencv做图片相似度比较

对于图片相似度比较有很多方法,我们这以RGB直方图为例。


我们以一种规则,使得每个图片生成一组描述的特征向量。

opencv的直方图比较函数我们可以巧妙的利用,其有若干比较规则,但只支持直方图的数据结构,我们可以将特征向量拟合成直方图的数据结构,然后使用其的相似度比较函数。


具体的数学计算方法有兴趣的可以看opencv的官方教程,这里我们期望生成百分比形式的相似度参数,所以使用CV_COMP_CORREL


以下是代码,以python编写


  1. import cv2.cv as cv 
  2.  
  3. def createHist(img): 
  4.     #cv.CvtColor(img,img,cv.CV_BGR2HSV) 
  5.     b_plane = cv.CreateImage((img.width,img.height), 8, 1
  6.     g_plane = cv.CreateImage((img.width,img.height), 8, 1
  7.     r_plane = cv.CreateImage((img.width,img.height), 8, 1
  8.  
  9.  
  10.     cv.Split(img,b_plane,g_plane,r_plane,None
  11.     planes = [b_plane, g_plane, r_plane] 
  12.      
  13.     bins = 4 
  14.     b_bins = bins 
  15.     g_bins = bins 
  16.     r_bins = bins 
  17.  
  18.     hist_size = [b_bins,g_bins,r_bins] 
  19.     b_range = [0,255
  20.     g_range = [0,255
  21.     r_range = [0,255
  22.  
  23.     ranges = [b_range,g_range,r_range] 
  24.     hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, ranges, 1
  25.     cv.CalcHist([cv.GetImage(i) for i in planes], hist) 
  26.     cv.NormalizeHist(hist,1
  27.     return hist 
  28.  
  29. def imgcompare(image1,image2): 
  30.     img1 = cv.LoadImage(image1) 
  31.     hist1 = createHist(img1) 
  32.     img2 = cv.LoadImage(image2) 
  33.     hist2 = createHist(img2) 
  34.     return cv.CompareHist(hist1,hist2,cv.CV_COMP_CORREL) 
  35.      
  36. print imgcompare("test_19037_19037_source.jpg","19015.jpg"
  37. print imgcompare("test_19037_19037_source.jpg","19014.jpg"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值