본문 바로가기

딥러닝

딥러닝 - OpenCV_006_ROI_그래프_텍스트출력

[6차시] 학습목표
○ ROI (Region of Image)를 자르고 표시하는 방법에 대해 학습한다.
○ 한글을 출력하는 방법에 대해 학습한다.
○ 비트 연산으로 이미지를 합성하는 방법을 학습한다.

1  픽셀/블록 기반 이미지 처리

1.1  ROI (Region of Image) 자르기

  • ROI (Region of Image)
    • 관심영역 - 이미지에 우리가 필요한 부분 (얼굴, 눈 ...)

img[200:370, 200:350]

#실습
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을 사용하여 이미지를 표시하고 있습니다.

EX)

# 좌상단좌표 (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") : 축을 숨깁니다.
EX)

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개 이미지 합치기

 

파일 다운 링크 :https://github.com/yoonhyochang/Deep_learning