일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 한빛미디어서평단
- Tistory
- 리눅스
- 서평
- 독후감
- 텐서플로
- Linux
- 매틀랩
- matplotlib
- MATLAB
- 월간결산
- Python
- Pandas
- Ga
- python visualization
- 통계학
- 시각화
- 한빛미디어
- 티스토리
- tensorflow
- 서평단
- Visualization
- SQL
- 파이썬
- 딥러닝
- MySQL
- 파이썬 시각화
- Blog
- 블로그
- Google Analytics
- Today
- Total
pbj0812의 코딩 일기
[PYTHON] OpenCV 를 활용한 타임스탬프 어플 클론 코딩 본문
0. 목표
- 아래와 같은 타임스탬프 어플 클론 코딩
1. 실습
1) 사진 준비
2) library 호출
import cv2
import numpy as np
from PIL import Image
import math
import time
import datetime
3) 이미지 불러오기
imgfile = './kalimba_ori.jpeg'
image = cv2.imread(imgfile)
4) 정사각형으로 만들기
- 어플의 형태는 정사각형 그림이므로 위 사진을 정사각형으로 변형
- x 보다 y가 크면 최소 길이를 y로 잡고 반대면 x로 잡음
- 사진의 중앙에서 최소 길이의 절반만큼 빼고 더한 구간을 새로운 이미지로 설정
x, y, z = np.shape(image)
if x > y:
min_len = y
else:
min_len = x
image2 = image[int(x/2) - int((min_len)/2):int(x/2) + int((min_len)/2), int(y/2) - int((min_len)/2):int(y/2) + int((min_len)/2), :]
- 테스트
image_test = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)
display(Image.fromarray(image_test))
5) 테두리 생성
- 색상은 하얀색
- 라인의 굵기는 4)에서 구한 최소 길이를 50으로 나눈 몫(올림)
- 사각형의 시작과 끝은 시작점에서 5%인 구간에서 95%인 구간
x2, y2, z2 = np.shape(image2)
color = (255, 255, 255)
thickness = math.ceil(min_len / 50)
cv2.rectangle(image2, (int(0.05 * x2), int(0.05 * y2)), (int(x2 - 0.05 * x2), int(y2 - 0.05 * y2)), color, thickness)
- 테스트
image_test = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB) # Converting BGR to RGB
display(Image.fromarray(image_test))
6) 현재 시각 입력
(1) 현재 시각 확보
now = time.localtime()
(2) AM, PM 연산
- 현재 시각이 13보다 작으면 AM, 이상이면 PM
- format을 이용해서 두자리수로 표현
if now.tm_hour < 13:
AM_OR_PM = ' AM'
t_hour = "%02d" %(now.tm_hour)
else:
AM_OR_PM = ' PM'
t_hour = "%02d"%(now.tm_hour - 12)
(3) 분
- 두자리수 표현
t_min = "%02d"%(now.tm_min)
(4) 월, 일, 년
- datetime 을 통한 영어 월 이름 획득
s = "%04d-%02d-%02d"%(now.tm_year, now.tm_mon, now.tm_mday)
dt = datetime.datetime.strptime(s, '%Y-%m-%d')
first_line = t_hour + ':' + t_min + AM_OR_PM
second_line = dt.strftime('%B %d, %Y')
- 테스트
print(first_line)
print(second_line)
- 결과
02:40 AM
October 17, 2020
(5) 이미지에 각인
- x 좌표는 전체 길이에서 10% 구간, y 좌표는 80%, 85% 구간
- 폰트 크기와 굵기는 first_line 에 하얀 줄 굵기의 1/4, second_line 에 1/8 만큼 부여
cv2.putText(image2, first_line, (int(0.10 * x2), int(0.8 * y2)), cv2.FONT_HERSHEY_PLAIN, int(thickness/4), color, int(thickness/4), 1)
cv2.putText(image2, second_line, (int(0.10 * x2), int(0.85 * y2)), cv2.FONT_HERSHEY_PLAIN, int(thickness/8), color, int(thickness/8), 1)
7) 저장
cv2.imwrite("./result.jpeg", image2)
2. 결과
3. 참고
- Python OpenCV | cv2.putText() method
- OpenCV 1. 도형 그리기 문자 (Python)
- What's the best way to convert a date in the form yyyy-mm-dd to a date using English month names?
'ComputerLanguage_Program > PYTHON' 카테고리의 다른 글
[PYTHON] PyQt를 활용한 반복 수행 앱 제작 (0) | 2020.10.27 |
---|---|
[PYTHON] PIL 을 이용한 이미지 생성시간 추출 (0) | 2020.10.18 |
[PYTHON] bokeh 라이브러리를 통한 산점도 그리기 (0) | 2020.10.14 |
[PYTHON] celluloid 를 활용한 gif 애니메이션 제작 (2) | 2020.10.12 |
[PYTHON] 파동의 개수 구하기 (0) | 2020.10.07 |