사이젤리야의 실수 찾기 (이탈리아 식재편)
소개
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)
대답
이해하기 어려운 부분도 있지만, 모두 검출 할 수있는 것 같습니다.
끝에
심플한 수법입니다만 실수 찾기에는 충분히 사용할 것 같은 생각이 듭니다. 더 어려운 과제에도 도전해 보겠습니다.
Reference
이 문제에 관하여(사이젤리야의 실수 찾기 (이탈리아 식재편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/stpete_ishii/items/614868cb845c4153ed55텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)