틀린그림찾기를 수행하기 위해서 가장 먼저 틀린그림을 다운로드 받아보자. 그림의 출처는 아래와 같다.
틀린그림찾기 무료프린트물 흑백!!
남편 직장따라 아무 연고도 없는 곳에 와서 아이와 뭐해야 하나? 고민중이신가요? 틀린그림찾기 한번 해보세요. 눈 뜨고 잘 찾아보세요. 이런거 카페에도 잘 안올라와요~ 아이의 집중력을 길러주는게 가장 좋..
imread로 파일이 읽어지지 않을 때
자료를 잘 다운로드 받았는데 읽어지지 않았다.
import cv2,os
import matplotlib.pyplot as plt
import numpy as np
%matplotlib auto
base_dir=r'C:\Users\qkdrk\Desktop\틀린그림찾기9종셋트'
files=[f"{base_dir}/{i}" for i in os.listdir(base_dir)]
file=files[0]
img=cv2.imread(file)
cv2.imwrite(f"{base_dir}/left.png",img_l)
imread로 읽어와지지 않는 이미지의 경우 np.fromfile을 통해 numpy로 읽어들이고 imdecode를 통해 아래와 같이 이미지화 할 수 있다.
files=[f"{base_dir}/{i}" for i in os.listdir(base_dir)]
file=files[0] #files[4]
img_array=np.fromfile(r"C:\Users\qkdrk\Desktop\틀린그림찾기9종셋트/1-8.jpg",np.uint8)
img=cv2.imdecode(img_array,cv2.IMREAD_COLOR)
## 이미지 추출
img_l=img[151:1150,20:665]
img_r=img[151:1150,665:1310]
# img_l=img[:-2,:450]
# img_r=img[1:-1,470:920]
imwrite로 파일이 저장되지 않을 때
실습을 편하게 하기위해 이미지를 제공하려고 보니 이미지 저장 또한 에러가 난다. 문제는 한글이긴한데.. 무튼.. 아래와 같이 imencode와 tofile을 통해 저장할 수 있다.
result,encoding_img=cv2.imencode('.png', img_l)
f=open(f"{base_dir}/left.png", mode='w+b')
encoding_img.tofile(f"{base_dir}/left.png")
f.close()
result,encoding_img=cv2.imencode('.png', img_r)
with open(f"{base_dir}/right.png", mode='w+b') as f:
encoding_img.tofile(f)
웹에서 바로 불러오려면?
이거 조차 귀찮을 수 있으니 .. 웹에서 바로 불러오는 예제도 제공해보고자 한다.
import requests
url="http://ducj3.iptime.org:80/content/images/2022/10/left-1.png"
image_nparray = np.asarray(bytearray(requests.get(url).content), dtype=np.uint8)
image = cv2.imdecode(image_nparray, cv2.IMREAD_COLOR)
plt.imshow(image )


이미지 사이 차이 구하기
아래와 같이 차이를 산출해주면 된다. 다만 이미지의 좌우 마진 조절을 제대로 하지 못하여 위 그림의 결과는 매우 다르게 나타났다.
from skimage.measure import compare_ssim # 예전버전
from skimage.metrics import structural_similarity
%matplotlib inline
score,diff=skimage.metrics.structural_similarity(
cv2.cvtColor(img_l,cv2.COLOR_BGR2GRAY),
cv2.cvtColor(img_r,cv2.COLOR_BGR2GRAY),full=True)
