[OpenCV] 그림을 일정 각도만큼 회전시키기 (getRotationMatrix2D, warpAffine, 파이썬)


파이썬에서 OpenCV를 사용해서 그림을 원하는 각도만큼 회전시키려면 다음과 같이 하시면 됩니다.


import cv2

import matplotlib.pyplot as plt


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

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

세로, 가로, 채널 = 그림RGB.shape


대각선 = int(((가로*가로 + 세로*세로)**0.5)) # 정수여야 합니다.

회전중심 = int(가로/2), int(세로/2) # 역시 정수여야 합니다.

회전각도 = 135 # 마음대로 정하세요    

새세로, 새가로 = 세로, 가로


그림회전 = cv2.getRotationMatrix2D(회전중심, 회전각도, 1) # 1은 확대/축소값입니다.

회전결과 = cv2.warpAffine(그림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] 그림의 가로, 세로 길이를 비율대로 바꾸기 (resize, 파이썬)


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


import cv2

import matplotlib.pyplot as plt

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

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

새가로비율, 새세로비율 = 0.3, 1.7 # 좋아하는 숫자를 넣으세요

그림새크기 = cv2.resize(그림RGB, (0, 0), fx=새가로비율, fy=새세로비율)


# 이 아래 부분은 그림을 화면에 출력하기 위한 부분으로, 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] 그림의 가로, 세로 길이 마음대로 바꾸기 (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'` 부분은 그림을 확대하거나 축소할 때 화면에 자연스럽게 표현되도록 하는 옵션입니다. 실행 예제 화면은 다음과 같습니다.



[리눅스] cat 사용법


cat은 연결한다는 뜻의 영단어 concatenate의 약자입니다. cat은 인자로 받은 문자열이나 파일을 다 이어붙여서 하나로 만들어서 출력합니다. 예를 들어


cat 파일1 파일2 파일3


이라고 쓰면 파일1, 파일2, 파일3의 내용이 순서대로 연결되어 화면에 출력됩니다.


이 성질을 사용해서 cat으로 파일의 내용을 볼 수 있습니다.


cat 파일1


이라고 하면 딱히 연결시킬 다른 파일이 없기 때문에 파일1의 내용만 화면에 출력됩니다.


그냥 cat이라고만 치면 키보드에서 입력을 받아서 화면에 출력합니다. 이것을 리다이렉션(>)을 사용해서 파일에 바로 저장할 수 있습니다. 입력을 마칠 때에는 새 줄의 맨 처음에서 ctrl+d를 누르시면 됩니다. 예를 들면 다음과 같습니다.


cat > 여기에저장.txt


cat에는 많은 옵션이 있습니다. 그 중 유용한 것 두 가지를 소개합니다.


-ve


-ve는 각 줄의 맽 끝을 $ 기호로 표시해주는 옵션입니다. 줄 맨 끝에 공백이 있을 경우 유용합니다.


-n


-n은 줄마다 1, 2, 3 등의 줄번호를 붙여서 출력하는 옵션입니다.


[파이썬] 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 하세요


[리눅스] 특정 mime 형식의 파일만 출력하기 (예제: jpeg 파일만 출력)


find ./ -type f -exec file --mime-type {}  \; | awk '{if ($NF != "image/jpeg") print $0 }'


이렇게 하면 jpeg 형식의 파일만 출력됩니다. 다른 형식의 파일을 찾아보고 싶으시면 "image/jpeg" 부분을 바꾸시면 됩니다.

+ Recent posts