[6차시] 학습목표 |
○ ROI (Region of Image)를 자르고 표시하는 방법에 대해 학습한다. ○ 한글을 출력하는 방법에 대해 학습한다. ○ 비트 연산으로 이미지를 합성하는 방법을 학습한다. |
1 픽셀/블록 기반 이미지 처리
1.1 ROI (Region of Image) 자르기
- ROI (Region of Image)
- 관심영역 - 이미지에 우리가 필요한 부분 (얼굴, 눈 ...)
#실습
import cv2
import matplotlib. pyplot as plt
img = cv2.imread("./images/dip.jfif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.axis("off")
이미지를 읽어오고, matplotlib을 사용하여 이미지를 표시하고 있습니다.
# 좌상단좌표 (122,40)
# 우하단좌표 (195,111)
roi_img = img[40:111, 122:195]
plt.imshow(roi_img)
plt.axis("off")
5 / 5
주어진 이미지에서 좌상단 좌표 (122,40)과 우하단 좌표 (195,111)로 지정한 부분 영역을 선택하여 출력하는 코드입니다.
- img[40:111, 122:195] : 좌상단 좌표 (122,40)과 우하단 좌표 (195,111)으로 지정한 영역을 선택하여 roi_img 변수에 할당합니다.
- plt.imshow(roi_img) : 선택된 영역을 화면에 출력합니다.
- plt.axis("off") : 축을 숨깁니다.

1.2 ROI에 도형 그리기
- cv2.line(배경이미지, 시작점좌표, 끝점좌표, 색상, 선두께) : 직선 그리기
import cv2
import matplotlib. pyplot as plt
img = cv2.imread("./images/dip.jfif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 뚜깨를 -1로 하면 채운 도형이 그려줌
cv2.circle(img, (157, 84), 50, (255, 0, 0), 3)
plt.imshow(img)
plt.axis("off")
- cv2.circle(): 원을 그리는 함수
- (157, 84): 원의 중심 좌표
- 50: 원의 반지름
- (255, 0, 0): 원의 색상 (BGR순서)
- 3: 선 두께
- cv2.circle(배경이미지, 중심좌표, 반지름, 색상, 선두께) : 원 그리기
#실습
# 좌상단좌표 (122,40)
# 우하단좌표 (195,111)
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("./images/dip.jfif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 사각형 그리기
cv2.rectangle(img, (122, 40), (195, 111), (255, 0, 0), 3)
# 이미지 보여주기
plt.imshow(img)
plt.axis("off")
- cv2.rectangle을 사용하여 좌상단 좌표와 우하단 좌표를 전달해 사각형을 그립니다.
- 색상을 표시하기 위해 (255, 0, 0)과 같은 튜플을 사용합니다.
- 굵기는 3으로 설정했습니다.
- 마지막으로 imshow 함수를 사용하여 이미지를 표시합니다.
- cv2.rectangle(배경이미지, 좌상단점좌표, 우하단점좌표, 색상, 선두께) : 사각형 그리기
#실습
- cv2.ellipse(배경이미지, 중심좌표, 장축/단축 반지름, 기울기, 호의시작각, 호의 종료각, 색상, 선두께) : 타원 그리기
#실습
# 좌상단좌표 (122,40)https://papago.naver.com/
# 우하단좌표 (195,111)
import cv2
import matplotlib. pyplot as plt
img = cv2.imread("./images/dip.jfif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.rectangle(img,(122,40),(195,111),(255,0,0),3)
cv2.putText(img,"null",(116,40),cv2.FONT_HERSHEY_SIMPLEX,
1,(0,0,255), 2)
plt.imshow(img)
plt.axis("off")
위 코드는 dip.jfif 이미지에서 특정 부분을 사각형으로 강조하고 "null"이라는 텍스트를 추가한 후 이미지를 출력하는 예제입니다.
- cv2.imread 함수를 사용하여 이미지 파일을 읽어옵니다.
- cv2.cvtColor 함수를 사용하여 BGR 형식으로 읽어온 이미지를 RGB 형식으로 변환합니다.
- cv2.rectangle 함수를 사용하여 좌표 (122,40)을 좌상단, (195,111)을 우하단으로 하는 사각형을 그립니다.
- cv2.putText 함수를 사용하여 "null"이라는 텍스트를 좌표 (116,40)에 추가합니다.
- plt.imshow 함수를 사용하여 결과 이미지를 출력합니다.
- plt.axis 함수를 사용하여 축을 표시하지 않도록 설정합니다.
- cv2.putText(배경이미지, 출력내용, 출력시작좌표, 폰트, 크기, 색상, 굵기) : 텍스트 그리기
#실습
1.3 한글 출력하기
- c:/Windows/Fonts 폴더에서 사용할 폰트를 현재 폴더에 fonts 폴더를 생성하고 복사한다
- font = ImageFont.truetype("fonts/gulim.ttc", 30) : 사용할 폰트와 크기를 가져온다
- img_pil = Image.fromarray(img) : array 이미지를 PIL 이미지로 변환
- draw = ImageDraw.Draw(img_pil) : PIL 이미지를 그림
- draw.text((200, 20), "레나 이미지", font=font, fill=(0, 0, 255, 0)) : 이미지에 텍스트를 그림
- img = np.array(img_pil) : PIL 이미지를 numpy 배열로 변환
#실습
필요한 모듈 import
import cv2
import matplotlib. pyplot as plt
from PIL import ImageFont, ImageDraw, Image
import numpy as np
이미지 불러오기
img = cv2.imread("./images/dip.jfif")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
폰트 설정 및 이미지에 쓰기
font = ImageFont.truetype("./font/H2MJSM.TTF",20) # 30 : 폰트크기
pil_img = Image.fromarray(img)
draw = ImageDraw.Draw(pil_img)
draw.text((116,40),"저는 뇌섹남입니다", font =font, fill=(0,0,255,0))
이미지 보여주기
plt.imshow(pil_img)
plt.axis("off")
2 이미지 합성하기
2.1 비트 연산을 이용해서 합성하기
#실습
- cv2.bitwise_not(mask)
- mask는 흑백이미지여야 함
- 0을 255로 255롤 0으로 변환 (반전)
#실습
- cv2.bitwise_and(src1, src2, mask)> : mask의 값이 아닌 부분만 src1과 src2를 AND 연산
- mask는 흑백이미지여야 함
- mask 값이 0인 부분 (검정)은 연산되지 않고 검정색 부분 그대로 놓여짐
실습
실습문제
○ 다음과 같이 2개의 이미지를 합성해보자.
[6차시] 정리하기 |
○ ROI (Region of Image) : 관심영역을 의미 ○ line() - 선그리기 ○ circle() - 원 그리기 ○ rectangle() - 사각형 그리기 ○ ellipse() - 타원 그리기 ○ putText() - 문자 출력 ○ bitwise_not() : 반전 연산 ○ bitwise_and() : AND 연산 ○ add() : 2개 이미지 합치기 |
'딥러닝' 카테고리의 다른 글
딥러닝 -OpenCV_008_에지_필터링 (0) | 2023.03.08 |
---|---|
딥러닝 -OpenCV_007_HSV_모폴로지 (0) | 2023.03.07 |
딥러닝 - OpenCV_005_픽셀및채널 (0) | 2023.03.06 |
딥러닝 - ex04_손글씨 분류 (0) | 2023.03.06 |
딥러닝과 머신러닝의 차이점과 딥러닝에서 알아야 할 개념 (0) | 2023.03.06 |