최근 시작한 프로젝트의 일환으로 OpenCv를 사용하게 되었다.
프로젝트의 목표 중 하나로 항공사진으로부터 도로데이터를 추출하는게 있는데.. 일단 항공사진을 구해야할것아닌가?
항공사진을 구하기 위해서는 정부24에서 제공하는 항공사진 제공 서비스를 이용하면된다.
www.gov.kr/portal/service/serviceInfo/161300000084
사이트 가기 버튼을 누르면 다음과 같은 사이트로 넘어간다.
항공사진 간편출력 버튼을 눌러주자. 누르게 되면 다음과 같은 모습을 볼 수 있다.
여기서 항공사진을 찾는게 목적이니 지도선택에서 영상지도를 골라준다.
생각보다 고화질의 사진을 얻을 수 있다.
원하는 만큼 확대 후 여기서 내보내기 버튼을 눌러주면 다음과 같이 출력할 수 있다.
정부의 데이터니 당연히 상업적인 용도나 판매는 불법이니 할 생각은 하지 말자
그렇다면 이제 opencv를 써봐야하지 않은가
이제 파이썬으로 가보자
일단 간단하게 파이썬 파일과 같은 같은 디렉토리 안에 사진을 넣어준다.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
# reading in an image
image = mpimg.imread('services.jpeg')
# printing out some stats and plotting the image
print('This image is:', type(image), 'with dimensions:', image.shape)
plt.imshow(image)
plt.show()
다음과 같이 입력하면 출력이 이렇게 나오게된다.
그러면 이미지를 변환시켜보자. 그레이스케일로 한번 변환시켜보았다.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
# reading in an image
image = mpimg.imread('services.jpeg')
# printing out some stats and plotting the image
print('This image is:', type(image), 'with dimensions:', image.shape)
plt.imshow(image)
plt.show()
def grayscale(image):
return cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
gray = grayscale(image)
plt.figure(figsize=(10,8))
plt.imshow(gray, cmap='gray')
plt.show()
음... 감이안잡힌다. 이번에는 가우시안 블러를 써보자.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
# reading in an image
image = mpimg.imread('services.jpeg')
# printing out some stats and plotting the image
print('This image is:', type(image), 'with dimensions:', image.shape)
# plt.imshow(image)
# plt.show()
def grayscale(image):
return cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
def gaussian_blur(image,kernel_size):
return cv2.GaussianBlur(image,(kernel_size,kernel_size),0)
gray = grayscale(image)
kernel_size = 5
blur_gray = gaussian_blur(gray,kernel_size)
plt.figure(figsize=(10,8))
plt.imshow(blur_gray, cmap='gray')
plt.show()
음.. 아직 뭐가 뭔지 모르겠다. 여기서 Canny edge detection 알고리즘을 써보았다.
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
# reading in an image
image = mpimg.imread('services.jpeg')
# printing out some stats and plotting the image
print('This image is:', type(image), 'with dimensions:', image.shape)
# plt.imshow(image)
# plt.show()
def grayscale(image):
return cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
def gaussian_blur(image,kernel_size):
return cv2.GaussianBlur(image,(kernel_size,kernel_size),0)
gray = grayscale(image)
kernel_size = 5
blur_gray = gaussian_blur(gray,kernel_size)
def canny(img,low_threshold,high_threshold):
return cv2.Canny(img, low_threshold,high_threshold)
low_threshold = 50
high_threshold = 200
edges = canny(blur_gray,low_threshold,high_threshold)
plt.figure(figsize=(10,8))
plt.imshow(edges, cmap='gray')
plt.show()
다음과 같이 출력되었다. 솔직히 여기서 느꼈다. 항공사진에서 도로를 검출하는것은 단순 Opencv로 안된다는 사실을 말이다.
그래서 이에대한 구글링으로 찾아보니 스택오버플로에 다음과 같은 글이 있었다.
나랑 비슷한 고민을 했었나보다. 답변자는 Tensorflow를 같이 써야한다는데... 음... 이제 딥러닝으로 가즈아!
다음시간에는 딥러닝을 적용시킨 결과를 포스팅할 계획이다.
아래 링크는 Opencv 참고링크이다.
'Python > OpenCV' 카테고리의 다른 글
MacOS Catalina에서 OpenCV4 설치하기 (python3) (0) | 2020.05.15 |
---|