### 이미지 처리
- 픽셀 기반 처리 : 이미지를 픽셀 단위로 처리하는 방법
- 이미지 특성 표현에 한계가 있음, 이미지 처리 속도가 느림
- 블록 기반 처리 : 블록(픽셀을 그룹화한 것) 단위로 처리
- 지역적 특성을 잘 표현, 이미지 속도가 빠름
- 주파수 기반 처리 : 이미지를 주파수 영역으로 변환하여 처리하는 방법
- 주파수(frequency) : 이미지 픽셀값들을 변화분으로 표현한 것
- 이미지의 주파수 : 픽셀의 변화량
- 고주파 성분 : 픽셀값의 변화가 큰 부분(에지)
- 저주파 성분 : 픽셀값의 변화가 작은 부분
import cv2
import matplotlib.pyplot as plt
# 이미지 출력
img = cv2.imread('./square.png')
plt.subplot(2, 1, 1)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
img2 = cv2.imread('./square2.jpg')
plt.subplot(2, 1, 2)
plt.xticks([])
plt.yticks([])
plt.imshow(img2)
print(img)
print(img2)
img = cv2.imread('./coke.png', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
#### 픽셀값 변경
img[200, 100]
img = cv2.imread('./coke.png', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 이미지[행, 열]
for x in range(200, 210):
for y in range(100, 110):
# 픽셀값을 파란색으로 변경
img[x, y] = [0, 0, 255]
plt.xticks([])
plt.yticks([])
plt.imshow(img)
### ROI(Region of Image) 자르기
- 관심 영역(이미지 전체가 아닌 필요한 부분만)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
img.shape
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img[300:, :120]
plt.xticks([])
plt.yticks([])
plt.imshow(img)
#### ROI에 도형 그리기
# 직선 그리기
# cv2.line(이미지, 시작점 좌표, 끝점 좌표, 색상, 선 두께)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 직선 출력
img = cv2.line(img, (200, 180), (20, 180), (0, 0, 255), 3)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
# 사각형 그리기
# cv2.rectangle(이미지, 좌상단 좌표, 우하단 좌표, 색상, 선 두께)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 사각형 출력
img = cv2.rectangle(img, (200, 350), (20, 180), (0, 0, 255), 3)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
# 원 그리기
# cv2.circle(이미지, 중심좌표, 반지름, 색상, 선 두께)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 원 출력
img = cv2.circle(img, (180, 60), 50, (0, 0, 255), 3)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
# 텍스트 그리기
# cv2.putText(이미지, 출력내용, 출력시작좌표, 폰트, 크기, 색상, 굵기)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 사용 폰트 설정
font = cv2.FONT_HERSHEY_SIMPLEX
# 텍스트 출력
img = cv2.circle(img, (180, 60), 50, (0, 0, 255), 3)
img = cv2.putText(img, "text", (60, 180), font, 4, (255, 0, 0), 7)
plt.xticks([])
plt.yticks([])
plt.imshow(img)
import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import matplotlib.pyplot as plt
# 텍스트 그리기
# cv2.putText(이미지, 출력내용, 출력시작좌표, 폰트, 크기, 색상, 굵기)
img = cv2.imread('meet.jpg', cv2.IMREAD_COLOR)
# 색상공간 변환(BGR -> RGB)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 사용 폰트 설정
font = ImageFont.truetype("fonts/gulim.ttc", 30) # 사용할 폰트, 크기
img_pil = Image.fromarray(img) # array 이미지를 PIL 이미지로 변환
draw = ImageDraw.Draw(img_pil) # PIL 이미지 그림
# fill = (red, green, blue, alpha)
draw.text((200, 80), "꼬기", font=font, fill=(255, 0, 0, 0)) # 이미지에 텍스트 그리기(R,G,B,투명도)
img = np.array(img_pil) # PIL을 이미지로 바꿔주기
plt.xticks([])
plt.yticks([])
plt.imshow(img)
plt.show()
댓글