Überprüfen Sie beispielsweise das Erscheinungsbild von in PDF konvertierten OFFICE-Dokumenten mit einer anderen Formatierungs-Engine. Ich möchte ein Bild, das als Beweismittel verwendet werden kann, damit die Leute es verstehen können. Außerdem ist es schwierig, alle Bilder zu sehen, daher gebe ich dem Grad des Unterschieds einen numerischen Wert, und die Leute überprüfen nur diejenigen mit dem großen Unterschied.
Es ist inoffiziell, aber es gibt eine OpenCV-Python-Umgebung, also werde ich sie schnell einfügen.
pip install opencv-python
Die abhängige Anzahl ist ebenfalls enthalten.
https://pypi.org/project/opencv-python/
diff_img.py
import pathlib
import cv2
import numpy as np
source_dir = pathlib.Path('source_img')
source_files = source_dir.glob('*.*')
target_dir = pathlib.Path('target_img')
result_dir = pathlib.Path('result_img')
log_file = result_dir / pathlib.Path('result.log')
kernel = np.ones((3, 3), np.uint8)
fs = open(log_file, mode='w')
for source_file in source_files:
source_img = cv2.imread(str(source_file))
target_file = target_dir / source_file.name
target_img = cv2.imread(str(target_file))
if target_img is None:
fs.write(target_file + '...skipped.\n')
continue
max_hight = max(source_img.shape[0], target_img.shape[0])
max_width = max(source_img.shape[1], target_img.shape[1])
temp_img = source_img
source_img = np.zeros((max_hight, max_width, 3), dtype=np.uint8)
source_img[0:temp_img.shape[0], 0:temp_img.shape[1]] = temp_img
temp_img = target_img
target_img = np.zeros((max_hight, max_width, 3), dtype=np.uint8)
target_img[0:temp_img.shape[0], 0:temp_img.shape[1]] = temp_img
result_img = cv2.addWeighted(source_img, 0.5, target_img, 0.5, 0)
source_img = cv2.cvtColor(source_img, cv2.COLOR_BGR2GRAY)
target_img = cv2.cvtColor(target_img, cv2.COLOR_BGR2GRAY)
img = cv2.absdiff(source_img, target_img)
rtn, img = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
contours, hierarchy = cv2.findContours(img, cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
result_img = cv2.drawContours(result_img, contours, -1, (0, 0, 255))
score = 0
for contour in contours:
score += cv2.contourArea(contour)
score /= max_hight * max_width
fs.write(target_file.name + ', ' + str(score) + '\n')
diff_file = result_dir / source_file.name
cv2.imwrite(str(diff_file), result_img)
fs.close()
Informationen zur Vergleichsmethode finden Sie in diesem Artikel [Es war zu schwierig, einen Fehler in Saiseriya zu finden, deshalb habe ich ihn mit Hilfe eines Erwachsenen gelöst] (http://kawalabo.blogspot.com/2014/11/blog-post.html) http://kawalabo.blogspot.com/2014/11/blog-post.html Wird bezeichnet.
Die Punktzahl wird einfach berechnet, indem der Bereich des Bereichs, in dem der Unterschied festgestellt wurde, herausgenommen, durch den Bereich des gesamten Bildes dividiert und zusammen mit dem Dateinamen im Protokoll ausgespuckt wird.
result.log
test-1.png, 0.01231201710816777
test-2.png, 0.0084626793598234
Obwohl es sich um eine ähnliche Tabelle handelt, war die Breite des Vergleichsziels etwas kleiner und der Rand größer.