我有下面定义的两个彩色图像img1和img2
img1 = cv2.imread("source1")
img2 = cv2.imread("source2")
现在我想知道两个图像的RGB值分布是否几乎相同。作为人类,我可以从两个图像的RGB直方图分布中看出它们几乎相同还是不相同。但是有没有办法我可以通过OpenCV做到这一点,它可以告诉我们两个图像的RGB分布几乎完全相同?
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv.calcHist([img1],[i],None,[256],[0,256])
plt.subplot(1,2,1)
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.title("Img 1")
histr = cv.calcHist([img2],[i],None,[256],[0,256])
plt.subplot(1,2,2)
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.title("Img 2")
plt.show()
答案 0 :(得分:1)
如果在两个直方图A和B的x轴上取每个点,则两者在该点的重叠量就是较小的高度:
min(A,B)
因此,您只需要对要点求和:
np.sum(np.minimum(A,B))
作为经验解释,如果两个直方图在相同位置都很高,则直方图重叠会很高,min(A,B)
也会如此。如果一个为高而一个为低,则直方图重叠并且min(A,B)
将为低。
我找到了一个不错的插图here,该插图还可以通过除以像素总数来建议归一化。
答案 1 :(得分:1)
您可以在Python / OpenCV中使用cv2.compareHist()。它采用两个可以是1D,2D或3D直方图的直方图,并返回相似度的度量值。
例如,参见https://docs.opencv.org/3.4/d6/dc7/group__imgproc__hist.html#gaf4190090efa5c47cb367cf97a9a519bd和https://docs.opencv.org/3.4/d8/dc8/tutorial_histogram_comparison.html和https://www.pyimagesearch.com/2014/07/14/3-ways-compare-histograms-using-opencv-python/