Anaconda prompt
opencv이름의 환경 만들기
conda create -n opencv python=3.8
opencv 환경 들어가기
activate opencv
파이썬 다양한 라이브러리 설치하기
pip install opencv-python scikit-learn numpy pandas jupyter matplotlib
jupyter notebook 접속
jupyter notebook
배경 사진에서 원하는 물체 찾기
아래 사진에서
파란 달팽이와 초록 버섯을 찾아보자!
import cv2
# 템플릿 매칭
# 배경 사진에서 원하는 물체 찾기
# 메이플 배경 이미지에서 파란 달팽이, 초록 버섯 찾기
# 좌 상단부터 한 픽셀씩 움직이면서 원하는 물체와 배경이 유사한 지 검색
img = cv2.imread('images/maplestory.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
blue_snail = cv2.imread('images/bluesnail.jpg')
blue_snail_gray = cv2.cvtColor(blue_snail, cv2.COLOR_RGB2GRAY) #흑백화
h1, w1 = blue_snail_gray.shape #찾을 대상(흑백이미지)의 세로, 가로 크기 받아오기
green_mush = cv2.imread('images/greenmushroom.jpg')
green_mush_gray = cv2.cvtColor(green_mush, cv2.COLOR_RGB2GRAY)
h2, w2 = green_mush_gray.shape
#이미지 찾기(배경이미지, 찾을 이미지, 찾을 방법)
res1 = cv2.matchTemplate(img_gray, blue_snail_gray, cv2.TM_CCOEFF_NORMED)
cv2.imshow('maplestory',img)
cv2.imshow('snail',blue_snail)
cv2.imshow('mush',green_mush)
cv2.waitKey(0)
cv2.destoryAllWindows()
#배경과 찾는 이미지가 얼마나 유사한 지에 대한 결과
#-1 ~ 1사이의 값이 나옴 -1 : 전혀 상관 없음, 0 : 별 상관 없음, 1 : 완전 똑같음
#유사도가 0.75 이상인 값들만 사용할 것
res1 >= 0.75
유사도가 0.75 이상인 값들의 좌표값
#배경과 찾는 이미지가 얼마나 유사한 지에 대한 결과
#-1 ~ 1사이의 값이 나옴 -1 : 전혀 상관 없음, 0 : 별 상관 없음, 1 : 완전 똑같음
#유사도가 0.7 이상인 값들만 사용할 것
res1 >=0.7
import numpy as np
loc = np.where(res1 >= 0.75)
# 데이터 순서 역으로 바꾸기
for pt in zip(*loc[::-1]):
print(pt)
(233, 29) #X좌표, Y좌표
(454, 411)
(455, 411)
(455, 412)
(522, 531)
(523, 531)
(522, 532)
...
찾는 대상의 좌측 상단의 좌표이다.
배경에서 찾고자 하는 이미지들의 좌표를 알게 되었으니 배경이미지에 사각형으로 표현해보자.
import cv2
# 템플릿 매칭
# 배경 사진에서 원하는 물체 찾기
# 메이플 배경 이미지에서 파란 달팽이, 초록 버섯 찾기
# 좌 상단부터 한 픽셀씩 움직이면서 원하는 물체와 배경이 유사한 지 검색
img = cv2.imread('images/maplestory.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
blue_snail = cv2.imread('images/bluesnail.jpg')
blue_snail_gray = cv2.cvtColor(blue_snail, cv2.COLOR_RGB2GRAY) #흑백화
h1, w1 = blue_snail_gray.shape #찾을 대상(흑백이미지)의 세로, 가로 크기 받아오기
green_mush = cv2.imread('images/greenmushroom.jpg')
green_mush_gray = cv2.cvtColor(green_mush, cv2.COLOR_RGB2GRAY)
h2, w2 = green_mush_gray.shape
#이미지 찾기(배경이미지, 찾을 이미지, 찾을 방법)
res1 = cv2.matchTemplate(img_gray, blue_snail_gray, cv2.TM_CCOEFF_NORMED)
for pt in zip(*loc[::-1]):
#print(pt) x, y의 좌표가 들어가 있음.
#배경이미지에 위치 사각형으로 표현
#cv2.rectangle(배경이미지, 좌상단 좌표, 우하단 좌표, 색상, 두께)
cv2.rectangle(img, pt, (pt[0] + w1, pt[1] + h1),(0,0,255),1.5)
cv2.imshow('maplestory',img)
cv2.imshow('snail',blue_snail)
cv2.imshow('mush',green_mush)
cv2.waitKey(0)
cv2.destoryAllWindows()
import cv2
# 템플릿 매칭
# 배경 사진에서 원하는 물체 찾기
# 메이플 배경 이미지에서 파란 달팽이, 초록 버섯 찾기
# 좌 상단부터 한 픽셀씩 움직이면서 원하는 물체와 배경이 유사한 지 검색
img = cv2.imread('images/maplestory.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
blue_snail = cv2.imread('images/bluesnail.jpg')
blue_snail_gray = cv2.cvtColor(blue_snail, cv2.COLOR_RGB2GRAY) #흑백화
h1, w1 = blue_snail_gray.shape #찾을 대상(흑백이미지)의 세로, 가로 크기 받아오기
green_mush = cv2.imread('images/greenmushroom.jpg')
green_mush_gray = cv2.cvtColor(green_mush, cv2.COLOR_RGB2GRAY)
h2, w2 = green_mush_gray.shape
#이미지 찾기(배경이미지, 찾을 이미지, 찾을 방법)
# res1 = cv2.matchTemplate(img_gray, blue_snail_gray, cv2.TM_CCOEFF_NORMED)
# for pt in zip(*loc[::-1]):
# #print(pt) x, y의 좌표가 들어가 있음.
# #배경이미지에 위치 사각형으로 표현
# #cv2.rectangle(배경이미지, 좌상단 좌표, 우하단 좌표, 색상, 두께)
# cv2.rectangle(img, pt, (pt[0] + w1, pt[1] + h1),(0,0,255),2)
res2 = cv2.matchTemplate(img_gray, green_mush_gray, cv2.TM_CCOEFF_NORMED)
for pt in zip(*loc[::-1]):
#print(pt) x, y의 좌표가 들어가 있음.
#배경이미지에 위치 사각형으로 표현
#cv2.rectangle(배경이미지, 좌상단 좌표, 우하단 좌표, 색상, 두께)
cv2.rectangle(img, pt, (pt[0] + w2, pt[1] + h2),(0,0,255),2)
cv2.imshow('maplestory',img)
cv2.imshow('snail',blue_snail)
cv2.imshow('mush',green_mush)
cv2.waitKey(0)
cv2.destoryAllWindows()
#배경과 찾는 이미지가 얼마나 유사한 지에 대한 결과
#-1 ~ 1사이의 값이 나옴 -1 : 전혀 상관 없음, 0 : 별 상관 없음, 1 : 완전 똑같음
#유사도가 0.7 이상인 값들만 사용할 것
# res1 >=0.7
# import numpy as np
# loc = np.where(res1 >= 0.75)
# # 데이터 순서 역으로 바꾸기
# for pt in zip(*loc[::-1]):
# print(pt)
res2 >=0.7
import numpy as np
loc = np.where(res2 >= 0.75)
# 데이터 순서 역으로 바꾸기
for pt in zip(*loc[::-1]):
print(pt)