首页 > 解决方案 > 比较两个图像,如果它们具有几乎相同的 RGB 颜色分布

问题描述

我有两个彩色图像 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()

标签: pythonopencv

解决方案


您可以在 Python/OpenCV 中使用 cv2.compareHist()。它需要两个直方图,可以是 1D、2D 或 3D 直方图,并返回相似度的度量分数。

请参阅https://docs.opencv.org/3.4/d6/dc7/group__imgproc__hist.html#gaf4190090efa5c47cb367cf97a9a519bdhttps://docs.opencv.org/3.4/d8/dc8/tutorial_histogram_comparison.htmlhttps://www.pyimagesearch .com/2014/07/14/3-ways-compare-histograms-using-opencv-python/,例如


推荐阅读