사이젤리야의 실수 찾기 (이탈리아 식재편)

소개



OpenCV를 사용하여 사이젤리어 이탈리아 식재료의 실수 찾기를 시도했습니다.

이미지 잘라내기(수동)



이미지 2장에 대해 동일 픽셀 사이즈가 되도록 주의 깊게 잘라내어 png 형식으로 저장합니다.

라이브러리 가져오기



OpenCV와 같은 라이브러리를 가져옵니다.
import os
import subprocess
from PIL import Image
import cv2
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

이미지 크기 조정



잘린 이미지 파일을 dir1 폴더에 저장합니다. 그런 다음 이미지 크기를 300*300px로 설정하고 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



이미지 분할



이미지를 가로 세로 300 분할하여 b 값을 얻습니다. 분할수는 300의 약수라면 OK입니다만, Max인 300으로 하는 것으로 차분 화상의 정밀도가 최고가 됩니다.
dir2 = 'png_resize'
files2 = os.listdir(dir2)
files2.sort()

std_data2 =[]
image_data2 = []
grid =300 #分割数

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)

차분 영상화



차이를 찾아서 이미지화합니다.
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)    



대답



이해하기 어려운 부분도 있지만, 모두 검출 할 수있는 것 같습니다.



끝에



심플한 수법입니다만 실수 찾기에는 충분히 사용할 것 같은 생각이 듭니다. 더 어려운 과제에도 도전해 보겠습니다.

좋은 웹페이지 즐겨찾기