[PYTHON] Trouver des erreurs dans Saiseriya (ingrédients italiens)

introduction

J'ai essayé de trouver l'erreur dans ingrédients italiens de Saiseriya en utilisant OpenCV.

Recadrage d'image (manuel)

Découpez soigneusement les deux images pour qu'elles aient la même taille de pixel et enregistrez-les au format png.

Importer la bibliothèque

Importez une bibliothèque telle qu'OpenCV.

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

Réglage de la taille de l'image

Stockez le fichier image découpé dans le dossier dir1. Ensuite, définissez la taille de l'image sur 300 * 300px et stockez-la dans le dossier 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

Image fractionnée

Divisez l'image verticalement et horizontalement par 300 pour obtenir la valeur b. Si le nombre de divisions est une fraction de 300, c'est OK, mais en le réglant sur 300, qui est Max, la précision de l'image de différence sera la plus élevée.

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

std_data2 =[]
image_data2 = []
grid =300 #Numéro de division

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)

Imagerie de différence

Trouvez la différence et visualisez-la.

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

vérifier la réponse

Certaines parties sont difficiles à comprendre, mais il semble qu'elles ont toutes été détectées. ansfig.pngdiffans.png ans.png

À la fin

C'est une méthode simple, mais je pense qu'elle peut être suffisamment utilisée pour trouver des erreurs. J'essaierai des tâches encore plus difficiles.

Recommended Posts

Trouver des erreurs dans Saiseriya (ingrédients italiens)