5

尝试匹配两个图像以找出它们之间的分数。但它显示了一些尺寸错误。无法解决问题。我的代码如下:

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))

这给 n 一个错误:

raise ValueError('Input images must have the same dimensions.')

ValueError: Input images must have the same dimensions.

如何解决这个问题?

4

3 回答 3

11

修改 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))

函数输入期望(W ,cv2.resizeH)。这是cv2.shape(H,W) 输出的相反顺序,因此您需要抓住它,否则在比较非方形图像时会出现相同的错误。

于 2018-09-14T23:29:15.920 回答
3

您可以通过多种方式做到这一点:

与第一种方法一样,您可以分配一个小于图像实际尺寸的固定尺寸,并将两个图像的大小调整为相同的大小。例如,将所有图像的大小调整为 (150,150) 等。

在第二种方法中,您可以将其中一个图像重塑为其他图像的大小。试试这个代码:

imageB=cv2.resize(imageB,imageA.shape)

这对你有用,但如果两个图像的尺寸差异很大,有时你可能会丢失一些数据。您可以比较 x 和 y 维度并找到最小的一个。然后将两个图像的大小调整为 x 和 y 的最小维度。

于 2018-02-24T05:21:24.013 回答
2

错误

'输入图像必须具有相同的尺寸。'

告诉您您调用的函数需要相同尺寸的输入图像,而您没有这样做。

您显然可以通过提供具有相同尺寸的输入图像来解决该问题,或者如果图像具有不同的尺寸并且您出于任何原因无法更改它,则不调用该函数。

从文件加载图像后比较 imageA.shape 和 imageB.shape。

对于简单的调试:

print imageA.shape
print imageB.shape
于 2018-02-23T10:40:50.317 回答