最近一个项目需要比较两个图片的相似度,查找比较了一下觉得可以用OpenCV的histogram信息来比较两个图片的相似度。OpenCV的官网上有一些Python接口的信息,但是没有很好得整合起来。
首先需要用OpenCV来读取图片的信息:
Python: cv2.imread(filename[, flags]) → retval
然后用calcHist方法来获取图片的Histogram:
Python: cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) → hist¶
接下来用compareHist比较两张图片的Histogram:
Python: cv2.compareHist(H1, H2, method)
这边的method是不同的evaluation matrix,有如下五种可以选:
CV_COMP_CORREL Correlation
CV_COMP_CHISQR Chi-Square
CV_COMP_INTERSECT Intersection
CV_COMP_BHATTACHARYYA Bhattacharyya distance
CV_COMP_HELLINGER Synonym for CV_COMP_BHATTACHARYYA
所以接下来我们可以将整个流程完整的连接起来:
def compare_image(filepath1, filepath2):
image1 = cv.imread(filepath1)
hist1 = cv2.calcHist([image1], [0], None, [256], [0, 256])
image2 = cv.imread(filepath2)
hist2 = cv2.calcHist([image2], [0], None, [256], [0, 256])
return cv2.compareHist(hist1, hist2, CV_COMP_CORREL)