【发布时间】:2019-10-04 14:18:53
【问题描述】:
我有两张图片,想清楚地说明不同之处。我想为这两个图像添加颜色,以便用户可以在一两秒内清楚地发现所有差异。
例如,这里有两张图片有一些不同:
leftImage.jpg:
rightImage.jpg:
我目前使差异明显的方法是创建一个蒙版(两个图像之间的差异),将其着色为红色,然后将其添加到图像中。目标是用强烈的红色清楚地标记所有差异。这是我当前的代码:
import cv2
# load images
image1 = cv2.imread("leftImage.jpg")
image2 = cv2.imread("rightImage.jpg")
# compute difference
difference = cv2.subtract(image1, image2)
# color the mask red
Conv_hsv_Gray = cv2.cvtColor(difference, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(Conv_hsv_Gray, 0, 255,cv2.THRESH_BINARY_INV |cv2.THRESH_OTSU)
difference[mask != 255] = [0, 0, 255]
# add the red mask to the images to make the differences obvious
image1[mask != 255] = [0, 0, 255]
image2[mask != 255] = [0, 0, 255]
# store images
cv2.imwrite('diffOverImage1.png', image1)
cv2.imwrite('diffOverImage2.png', image1)
cv2.imwrite('diff.png', difference)
diff.png:
diffOverImage1.png
diffOverImage2.png
当前代码有问题: 计算出的掩码显示了一些差异,但不是全部(参见例如右上角的小块,或蓝色包上的绳索)。这些差异在计算掩码中仅显示非常轻微,但它们应该像其他差异一样清晰地显示为红色。
输入: 2 张有一些差异的图片。
预期输出: 3 张图像:两张输入图像,但突出显示了差异(以可配置的颜色清楚地突出显示),以及仅包含差异的第三张图像(掩码)。
【问题讨论】:
-
除非您使用无损格式,否则每个图像都会有很多非常细微的差异(导致噪点)。我对此了解不多,所以这只是一个猜测,但也许一些频率滤波器可以帮助消除这些位。
-
使用 absdiff 而不是减法,你会得到所有的差异,但噪音可能是个问题。有关使用 absdiff 的总体思路,请参阅 stackoverflow.com/questions/27035672/…
-
@coffeewin:现有答案中缺少什么?你在找什么?
-
@CrisLuengo 我正在寻找一种方法,它可以识别两个图像之间的差异,其中图像处于不同的角度或略微旋转,并且除了精确的差异外,还可以输出百分比差异。我已经使用 SIFT 和 ORB 研究了特征匹配,但这些方法没有给出定量结果。具体来说,我希望有一些解决方案结合了特征匹配(识别不同角度的差异)和 SSIM(提供图像相似度百分比的能力)
-
@coffeewin:您必须使用这些方法首先对齐两个图像(旋转/扭曲一个以匹配另一个),然后在这个问题中应用差分技术。参见这里:stackoverflow.com/questions/1819124/image-comparison-algorithm; stackoverflow.com/questions/23931/… ; stackoverflow.com/questions/1927660/… ; stackoverflow.com/questions/47705011/comparing-rotated-images .
标签: python image opencv image-processing computer-vision