尝试匹配两个图像以找出它们之间的分数。但它显示了一些尺寸错误。无法解决问题。我的代码如下:
from skimage.measure import compare_ssim
#import argparse
#import imutils
import cv2
img1="1.png"
img2="2.png"
# load the two input images
imageA = cv2.imread(img1)
imageB = cv2.imread(img2)
# convert the images to grayscale
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
# compute the Structural Similarity Index (SSIM) between the two
# images, ensuring that the difference image is returned
(score, diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff * 255).astype("uint8")
print("SSIM: {}".format(score))
这给出了一个错误:
raise ValueError('Input images must have the same dimensions.')
ValueError: Input images must have the same dimensions.
如何解决此问题?
答案 0 :(得分:3)
修改Saurav Panda的答案:
您可以像这样将其中一张图像重塑为其他图像的大小:
imageB=cv2.resize(imageB,imageA.shape)
请注意
(H, W) = imageA.shape
# to resize and set the new width and height
imageB = cv2.resize(imageB, (W, H))
cv2.resize
函数输入期望为(W,H)。这与cv2.shape
(H,W)的输出顺序相反,因此您需要抓住它,否则在比较非正方形图像时会得到相同的错误。
答案 1 :(得分:2)
您可以通过多种方式实现这一目标:
与第一种方法类似,您可以指定一个小于图像实际尺寸的固定尺寸,并将两个图像调整为相同尺寸。比如,将所有图像调整为(150,150)等等。
在第二种方法中,您可以将其中一个图像重塑为其他图像的大小。 试试这段代码:
imageB=cv2.resize(imageB,imageA.shape)
这对您有用,但如果两个图像的尺寸差异非常大,有时您可能会丢失一些数据。您可以比较x和y维度并找到最小的维度。然后将两个图像调整为x和y的最小维度。
答案 2 :(得分:0)
错误
'输入图片必须具有相同的尺寸。'
告诉您,您调用的函数需要输入相同尺寸的图像,并且您没有这样做。
你显然通过提供具有相同尺寸的输入图像或者如果图像具有不同的尺寸并且如果由于某种原因你无法改变它而不调用该函数来解决这个问题。
从文件加载图像后比较imageA.shape和imageB.shape。
简单调试:
print imageA.shape
print imageB.shape