【发布时间】:2019-12-03 18:26:43
【问题描述】:
我不确定要在线找到解决方案的正确术语是什么。
我有两个文件夹文件 1 和文件 2。在本示例的每个文件夹中,我只在每个文件夹中使用了六个图像。但是,一旦我修复了代码,我想比较几百张图像。
两个文件夹中的文件完全相同。
我的代码可以完美地比较每个文件并显示结果,但标签与输出结果不匹配。
compare_image_files(imgA[0], imgA[0])
compare_image_files(imgA[0], imgB[0])
compare_image_files(imgA[0], imgB[1])
compare_image_files(imgA[0], imgB[2])
compare_image_files(imgA[0], imgB[3])
compare_image_files(imgA[0], imgB[4])
compare_image_files(imgA[0], imgB[5])
我的代码并不优雅,但除了标签之外它可以工作:
%matplotlib inline
import matplotlib.pyplot as plt
from pathlib import Path
from IPython.display import Image, display
from sklearn.metrics import mean_squared_error as mse
from skimage.measure import compare_ssim as ssim
import numpy as np
from skimage import data
from skimage import exposure
from skimage.transform import match_histograms
import os, glob
import cv2
path = '/Users/minnymouse/Documents/AAA_TEST_FILES_AUDIO/EXP_1_MULTI_FIBER/'
#print(os.path.isdir(path))
from matplotlib import rcParams
rcParams['axes.titlepad'] = 20
source = '/Users/minnymouse/Documents/AAA_TEST_FILES_AUDIO/EXP_1_MULTI_FIBER/file1/'
#print(os.listdir(reference))
#print(os.path.isdir(source))
#print(os.listdir(source_images))
source_images = glob.iglob(source + "*.png")
for source_file in source_images:
source_head, tail = os.path.splitext(source_file)
im = cv2.imread(source_file)
imgA = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
#fig = plt.figure()
#source_image = plt.imshow(img)
#plt.axis("off")
reference =
'/Users/minnymouse/Documents/AAA_TEST_FILES_AUDIO/EXP_1_MULTI_FIBER/file2/'
reference_images = glob.iglob(reference + "*.png")
#print(os.listdir(reference_images))
for ref_file in reference_images:
ref_head, tail = os.path.splitext(ref_file)
im = cv2.imread(ref_file)
imgB = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
#fig = plt.figure()
#ref_image = plt.imshow(img)
#plt.axis("off")
def compare_image_files(imgA, imgB):
m = mse(imgA, imgB)
s = ssim(imgA, imgB)
print("Source File: " + os.path.basename(source_head), "is compared to " +
os.path.basename(ref_head), "= ", "MSE: %.2f, SSIM: %.2f" % (m, s))
return m, s
我认为问题在于 os.path.basename 或我如何为这两个文件夹设置“for”语句。我真的不知道,这使得这很难解决。 感谢您的帮助。
我是 Mac 10.14.6,使用 Jupyter 和 Python3
【问题讨论】:
-
您的问题是您没有将名称作为参数发送 -
compare_image_files(imgA, imgB, filename1, filenam2):。而且您必须在列表中保留带有图像的名称 -(image, filename)。使用source_head, tail = ...,您只能保留循环中的最后一个值。 -
其他问题可能是您没有将图像保留在列表中,
imgA、imgB只能保留最后一张图像,并使用imgA[0]、imgB[0]比较文件中的两行,不是两个文件。
标签: python macos label output jupyter