Eggs Sunny Side Up
본문 바로가기
Computer Engineering/딥러닝

OpenCV04_픽셀 및 채널

by guswn100059 2023. 7. 6.
### 이미지 처리
- 픽셀 기반 처리 : 이미지를 픽셀 단위로 처리하는 방법
    - 이미지 특성 표현에 한계가 있음, 이미지 처리 속도가 느림
- 블록 기반 처리 : 블록(픽셀을 그룹화한 것) 단위로 처리
    - 지역적 특성을 잘 표현, 이미지 속도가 빠름
- 주파수 기반 처리 : 이미지를 주파수 영역으로 변환하여 처리하는 방법
    - 주파수(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()

'Computer Engineering > 딥러닝' 카테고리의 다른 글

yolov6_chinchilla_detect  (0) 2023.07.07
mlp, cnn_개, 고양이_이미지데이터 _분류  (0) 2023.07.06
OpenCV03_동영상로드  (0) 2023.07.06
OpenCV02_이진화(흑백 이미지)  (0) 2023.07.03
OpenCV01_이미지로드  (0) 2023.07.03

댓글