我使用python2.7 opencv库来计算一些图像的直方图,所有图像的大小都完全相同(cv2.calchist)
我需要做两件事:1. 计算多个图像的平均值——多个图像代表一个相似的对象,因此我想要一个该对象的"代表性"直方图(如果你有更好的主意,我愿意接受建议),以便将来进行比较。2. 将直方图数据存储在mongo数据库中,以便将来进行比较(cv2相关性)
我看到的唯一与问题相关的代码是我的histogram_comparison代码:
def histogram_comparison(real, fake):
images = [real, fake]
index = []
for image in images:
image = image.decode('base64')
image = np.fromstring(image, dtype=np.uint8)
image = cv2.imdecode(image, 1)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
hist = cv2.calcHist([image], [0, 1, 2], None, [32, 32, 32],
[0, 256, 0, 256, 0, 256])
hist = cv2.normalize(hist).flatten()
index.append(hist)
result_dist = cv2.compareHist(index[0], index[1], cv2.cv.CV_COMP_CORREL)
return round(result_dist, 5)
取自:http://www.pyimagesearch.com/2014/07/14/3-ways-compare-histograms-using-opencv-python/
我确实意识到,当使用numpy的(或者是scipy?)直方图时,有一种简单的方法可以获得bin并平均它们,但是我不确定如何比较直方图,所以我宁愿使用opencv
thanks in advance
由于OpenCV(自2.2起)原生使用numpy数组,并且由于len(images)
是常量,您可以通过简单的方法获得mongo中所有直方图和存储之间的平均值:
h, b = np.histogram(images, bins=[0, 256])
db.histograms.insert({hist:(h/len(images)), bins:b })
我不知道它是否正是你想要的,但我希望它能帮助!再见!