对于图片相似度比较有很多方法,我们这以RGB直方图为例。
我们以一种规则,使得每个图片生成一组描述的特征向量。
opencv的直方图比较函数我们可以巧妙的利用,其有若干比较规则,但只支持直方图的数据结构,我们可以将特征向量拟合成直方图的数据结构,然后使用其的相似度比较函数。
具体的数学计算方法有兴趣的可以看opencv的官方教程,这里我们期望生成百分比形式的相似度参数,所以使用CV_COMP_CORREL
以下是代码,以python编写
import cv2.cv as cv
def createHist(img):
#cv.CvtColor(img,img,cv.CV_BGR2HSV)
b_plane = cv.CreateImage((img.width,img.height), 8, 1)
g_plane = cv.CreateImage((img.width,img.height), 8, 1)
r_plane = cv.CreateImage((img.width,img.height), 8, 1)
cv.Split(img,b_plane,g_plane,r_plane,None)
planes = [b_plane, g_plane, r_plane]
bins = 4
b_bins = bins
g_bins = bins
r_bins = bins
hist_size = [b_bins,g_bins,r_bins]
b_range = [0,255]
g_range = [0,255]
r_range = [0,255]
ranges = [b_range,g_range,r_range]
hist = cv.CreateHist(hist_size, cv.CV_HIST_ARRAY, ranges, 1)
cv.CalcHist([cv.GetImage(i) for i in planes], hist)
cv.NormalizeHist(hist,1)
return hist
def imgcompare(image1,image2):
img1 = cv.LoadImage(image1)
hist1 = createHist(img1)
img2 = cv.LoadImage(image2)
hist2 = createHist(img2)
return cv.CompareHist(hist1,hist2,cv.CV_COMP_CORREL)
print imgcompare("test_19037_19037_source.jpg","19015.jpg")
print imgcompare("test_19037_19037_source.jpg","19014.jpg")
分享到:
相关推荐
利用OpenCvSharp实现感知哈希算法进行图片相似度对比及Stitcher类图像拼接生成全景图像 vs2015环境
利用OpenCv提供的函数接口实现了两个图像的相似度的计算
利用opencV和C语言编写,利用纹理特征比较两幅图像的相似度
利用opencv开发包对摄像头前后帧相似度的计算和输出
c++利用opencv实现两张人脸图片的相似度检测,完整程序源码
该图像搜索引擎以Python作为开发语言,利用OpenCV强大的图像处理和分析能力,对输入的查询图像进行特征提取和匹配。通过精心设计的算法,系统能够准确识别出与查询图像相似的图片,并按照相似度进行排序展示。这不仅...
1. 图像相似度比较 如果我们有两张图像,并且这两张图像的直方图一样,或者有极高的相似度,那么在一定程度上,我们可以认为这两幅图是一样的,这就是直方图比较的应用之一。 2. 分析图像之间关系 两张图像的直方图...
功能:利用摄像头采集人脸数据(采集人脸图片的方法多种多样,可以直接从网上下载数据集,可以从视频中提取图片,还可以从摄像头实时的采集图片。)、训练模型、利用摄像头实时识别人脸(提取的人脸图像的特征数据与...
本程序代码是利用MFC进行开发,通过选择待检索图片和文件夹所在路径,对里面的图像的颜色特征进行检索,对相似度达到一定程序的图片就显示在MFC界面上,并且保存到指定文件夹内。其中利用到了OPENCV
利用facenet实现检测图片中的人脸,将识别到的人脸向量存入数据库,此外利用post提交一个新图片(也可以提交一个图片地址,参考face_recognition_api.py文件中get_url_imgae函数自行修改),返回数据库中相似的人脸...
打开图片,自动加载图片,显示人脸数量并截取人脸到右侧区域显示