[OpenCV] 그림의 가로, 세로 길이 마음대로 바꾸기 (resize, 파이썬)


그림 작업을 하다 보면 그림의 가로와 세로 길이를 바꾸어야 할 일이 종종 생깁니다. 파이썬에서 OpenCV를 사용해서 다음과 같이 하시면 됩니다.


import cv2

import matplotlib.pyplot as plt

그림BGR = cv2.imread("그림파일.jpg")

그림RGB = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2RGB)

새가로, 새세로 = 900, 300 # 좋아하는 숫자를 넣으세요

그림새크기 = cv2.resize(그림RGB, (새가로, 새세로))


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.subplot(1, 2, 1) # 1행 2열에서 1번째 열

plt.imshow(그림RGB)


plt.subplot(1, 2, 2) # 1행 2열에서 2번째 열

plt.imshow(그림새크기)


plt.show()


참고하실만한 OpenCV 공식 설명서 링크입니다.

http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#resize



[OpenCV] 컬러 사진을 흑백으로 변환하기 (cvtColor, 파이썬)


컬러 사진을 흑백으로 변환하려면 원래는 Y = 0.299*R + 0.587*G + 0.114*B 라는 식을 사용해서 픽셀 하나하나마다 계산을 해야 합니다. 하지만 파이썬에서 OpenCV를 사용하면 흑백 변환을 쉽게 할 수 있습니다.


import cv2

import matplotlib.pyplot as plt

그림BGR = cv2.imread("그림파일.jpg")

그림RGB = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2RGB)

그림흑백 = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2GRAY)


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.subplot(1, 2, 1) # 1행 2열에서 1번째 열

plt.imshow(그림RGB)

plt.xticks([]) # x축 좌표 숨김

plt.yticks([]) # y축 좌표 숨김


plt.subplot(1, 2, 2) # 1행 2열에서 2번째 열

plt.imshow(그림흑백, cmap='gray')

plt.xticks([]) # x축 좌표 숨김

plt.yticks([]) # y축 좌표 숨김


plt.show()


이렇게 하면 그림이 화면에 잘 표시됩니다. cmap='gray' 부분을 써 주어야 matplotlib이 흑백 사진을 제대로 출력합니다.



[OpenCV] BGR 사진을 RGB 사진으로 변환하기 (cvtColor, 파이썬)


파이썬에서 OpenCV를 사용해서 사진을 matplotlib 으로 화면에 출력하는 방법입니다. 컬러 사진을 OpenCV에서는 BGR 순서로 저장하는데 matplotlib에서는 RGB 순서로 저장합니다. 따라서 BGR을 RGB로 바꾸어 주어야만 사진이 제대로 표시됩니다.


import cv2

import matplotlib.pyplot as plt

그림BGR = cv2.imread("그림파일.jpg")

그림RGB = cv2.cvtColor(그림BGR, cv2.COLOR_BGR2RGB)


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, OpenCV 알고리즘과는 상관이 없습니다.

plt.imshow(그림RGB, interpolation='bicubic')

plt.show()


이렇게 하면 그림이 화면에 잘 표시됩니다. `interpolation='bicubic'` 부분은 그림을 확대하거나 축소할 때 화면에 자연스럽게 표현되도록 하는 옵션입니다. 실행 예제 화면은 다음과 같습니다.



[파이썬] glob - 디렉토리 내 특정 확장자 파일 모두 출력하기


디렉토리 안에 있는 파일을 다룰 때에는 os와 os.path를 함께 사용해도 되고 glob을 사용해도 됩니다. 특정 확장자의 파일만 가져오기 위해 glob을 사용해보도록 하겠습니다. 경로를 합치기 위해 os.path도 사용했습니다.


import glob

import os.path


myPath = '/내가/원하는/디렉토리/경로'

myExt = '*.jpg' # 찾고 싶은 확장자


for a in glob.glob(os.path.join(myPath, myExt)):

    print(a)


이렇게 하면 myPath 안에 있는 jpg 확장자 파일들이 화면에 출력됩니다.

[파이썬] os와 os.path - 디렉토리 내 파일 전부 출력하기


특정 디렉토리 안에 있는 파일을 배열로 받아와야 할 때가 종종 있습니다. os와 os.path를 함께 사용해도 되고 glob을 사용해도 됩니다. 여기서는 os와 os.path를 사용해보도록 하겠습니다.


import os

import os.path


myPath = '/내가/원하는/디렉토리/경로'

files = list()


for a in os.listdir(myPath):

    fullPath = os.path.join(myPath, a) # 파일일 수도 있고 디렉토리일 수도 있습니다.

    if os.path.isfile(fullPath): # 파일이라면

        files.append(fullPath)


print(files)


이렇게 하면 myPath 안에 있는 파일들이 화면에 출력됩니다.

[파이썬] argparse - 명령행 인자 쉽게 설정하기


파이썬 프로그래밍을 하다 보면 명령행에서 인자를 받아야 할 때가 종종 있습니다. 물론 sys.argv를 사용해도 되지만, argparse 모듈을 사용하면 명령행 인자를 훨씬 쉽게 관리할 수 있습니다. 사용법은 다음과 같습니다.


import argparse


parser = argparse.ArgumentParser(description='명령행 인자를 쉽게 설정합시다.')

parser.add_argument("-f", "--foo", required=True) # foo라는 인자

parser.add_argument("-b", "--bar",   required=True) # bar라는 인자


args = parser.parse_args()

foo = args.foo

bar = args.bar

# 이제부터 foo, bar 변수를 사용하시면 됩니다.


이렇게 프로그램을 만드신 후에는 명령행에서 쉽게 인자를 주실 수 있습니다. 다음과 같이 하시면 됩니다. 두 방법 다 됩니다.


$ python 인자연습.py -f 안녕 -b 하세요

$ python 인자연습.py --foo 안녕 --bar 하세요


+ Recent posts