Python中的图像尺寸错误

6
我尝试匹配两张图片,以找出它们之间的分数。但是出现了一些维度错误,无法解决该问题。以下是我的代码:
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.

如何解决这个问题?

imageA.shapeimageB.shape 是什么? - GPhilo
4个回答

13

修改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),因此您需要注意,否则在比较非方形图像时会产生相同的错误。


3
你可以用多种方法实现这个功能:
第一种方法是,你可以给图片设置一个小于实际尺寸的固定尺寸,并将所有图片都调整到相同的尺寸,比如将所有图片都调整为(150,150)等。
第二种方法是,你可以将其中一张图片重塑为其他图片的大小。 可以试试这段代码:
imageB=cv2.resize(imageB,imageA.shape)

这个方法可以解决问题,但如果两幅图像的大小差距很大,有时可能会丢失一些数据。您可以比较x和y维度的大小,找到最小的那个值。然后将这两幅图像都调整为这个最小的x和y维度。


1
是的,这就是问题。如果其他图像被调整大小,会有一些数据丢失。 - ass-king some questions

2

错误

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

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

您可以通过提供具有相同尺寸的输入图像来修复它,或者如果图像具有不同的尺寸并且由于某种原因无法更改,则不调用该函数。

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

对于简单的调试:

print imageA.shape
print imageB.shape

我得到的结果是:(162,256,3)和(162,250,3)。我想调整这两个图像的大小。 - Shaon Paul
@ShaonPaul 那么你可以决定要做什么。删除多余的列,添加缺失的列或者两者都可以?你也可以重新调整一个或两个图像的比例以获得相同的尺寸。 - Piglet

0
你可以使用tensorflow。请参见此链接,您可以相应地修改数据。

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅有链接的答案可能会失效。-【来自审查】 - Andreas Violaris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接