试图匹配两个图像找出他们之间的分数。但它显示了一些维度错误。无法修复这个问题。我的代码如下:
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条答案
按热度按时间rt4zxlrg1#
修改索拉芙·Pandas的回答:
您可以将其中一个图像的形状调整为另一个图像的大小,如下所示:
注意
cv2.resize
函数的输入需要(W,H),这与cv2.shape
(H,W)的输出顺序相反,所以你需要捕捉它,否则在比较非正方形图像时,你会得到同样的错误。cpjpxq1n2#
您可以通过多种方式执行此操作:
像第一种方法一样,你可以指定一个小于图像实际尺寸的固定尺寸,然后将两个图像的大小调整为相同的大小。
在第二种方法中,你可以将其中一个图像重新塑造成其他图像的大小。
这将为您工作,但如果两个图像的尺寸差异非常大,有时您可能会丢失一些数据。您可以比较两个x和y尺寸,并找到最小的一个。然后将两个图像的大小调整为x和y的最小尺寸。
r1wp621o3#
错误
'输入图像必须具有相同的尺寸。'
告诉您所调用的函数需要相同维度的输入图像,而您没有这样做。
很明显,可以通过提供具有相同尺寸的输入图像来解决这个问题,或者如果图像具有不同的尺寸并且由于某种原因无法更改,则不调用该函数。
从文件加载图像后,比较imageA.shape和imageB.shape。
对于简单调试:
2fjabf4q4#
您可以使用
tensorflow
。请参阅this link,并可以相应地修改数据