[PYTHON] Fehler in Saiseriya finden (italienische Zutaten)

Einführung

Ich habe versucht, den Fehler in italienischen Zutaten von Saiseriya mit OpenCV zu finden.

Bildausschnitt (manuell)

Schneiden Sie die beiden Bilder sorgfältig aus, damit sie dieselbe Pixelgröße haben, und speichern Sie sie im PNG-Format.

Bibliothek importieren

Importieren Sie eine Bibliothek wie OpenCV.

import os
import subprocess
from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

Bildgrößenanpassung

Speichern Sie die ausgeschnittene Bilddatei im Ordner dir1. Stellen Sie als Nächstes die Bildgröße auf 300 * 300px ein und speichern Sie sie im Ordner dir2.

dir1 = 'png'
dir2 = 'png_resize'

files1 = os.listdir(dir1)
files1.sort()

for file in files1:
    
    if '.png' in file:   
        img0 = os.path.join(dir1, file)
        img0_img = Image.open(img0)
        img1_img = img0_img.resize((300,300)) 
        img1 = os.path.join(dir2, file) 
        img1_img.save(img1)
        print(file)
        
# s1.png
# s2.png

s1.pngs2.png

Bildaufteilung

Teilen Sie das Bild vertikal und horizontal durch 300, um den b-Wert zu erhalten. Wenn die Anzahl der Unterteilungen ein Bruchteil von 300 ist, ist dies in Ordnung. Wenn Sie jedoch 300 einstellen, dh Max, ist die Genauigkeit des Differenzbilds am höchsten.

dir2 = 'png_resize'
files2 = os.listdir(dir2)
files2.sort()

std_data2 =[]
image_data2 = []
grid =300 #Abteilungsnummer

for file in files2:
   
    if '.png'  in file:        
        img = cv2.imread('./png_resize/' + file)
        h, w, c = img.shape    

        v_split = grid
        h_split = grid
        _img = img[:h // v_split * v_split, :w // h_split * h_split]

        image_data =[]
        
        for h_img in np.vsplit(_img, v_split):
            for v_img in np.hsplit(h_img, h_split):  
                b, g, r = cv2.split(v_img)
                value = round(b.mean())/100
                image_data.append(value)
        
        image_data2.append(image_data)

Differenzbildgebung

Finde den Unterschied und visualisiere ihn.

image_array2 =  np.array(image_data2)
dif_array = image_array2[0] - image_array2[1] 
dif_image=dif_array.reshape(grid,grid)
plt.imshow(dif_image)    

diff.png

Überprüfen Sie die Antwort

Es gibt einige Teile, die schwer zu verstehen sind, aber es scheint, dass alle entdeckt wurden. ansfig.pngdiffans.png ans.png

Am Ende

Es ist eine einfache Methode, aber ich denke, sie kann genug verwendet werden, um Fehler zu finden. Ich werde noch schwierigere Aufgaben versuchen.

Recommended Posts

Fehler in Saiseriya finden (italienische Zutaten)