OpenCV 기초 이미지처리

박산해·2025년 6월 25일
import cv2
img =cv2.imread('./data/pets.jpg')
cv2.imshow('pets',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('pets',img) -> 윈도우 창을 띄워서 이미지를 보여주는 것이 기본
cv2.waitKey(0) -> 0 : 무한대기, ms단위로 대기 시간 설정
cv2.destroyAllWindows() -> 키가 입력되면 모든 윈도우 창 닫기

cv2 자체가 가지고 있는 이미지 출력기능

imread(경로, 읽어내는 방식)

img_color = cv2.imread('./data/pets.jpg', cv2.IMREAD_COLOR)
img_gray = cv2.imread('./data/pets.jpg', cv2.IMREAD_GRAYSCALE)
img_unchaged = cv2.imread('./data/pets.jpg', cv2.IMREAD_UNCHANGED)

이미지 출력

cv2.imshow("color", img_color)
cv2.imshow("gray", img_gray)
cv2.imshow("unchaged", img_unchaged)
cv2.waitKey(0)  
cv2.destroyAllWindows()

cv2.waitKey(0) -> 0 : 무한대기, ms단위로 대기 시간 설정
cv2.destroyAllWindows() -> 키가 입력되면 모든 윈도우 창 닫기

이미지 크기(모양)확인

print("color : ", img_color.shape)
print("gray : ", img_gray.shape)
print("unchaged : ", img_unchaged.shape)
출력 값:
color : (427, 640, 3)
gray : (427, 640)
unchaged : (427, 640, 3)

matplotlib에서 이미지 출력

import cv2
import matplotlib.pyplot as plt

1. 이미지 경로 불러오기

img = cv2.imread('./data/pets.jpg', cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)

이진 이미지 구성(이미지 이진화)

  • 0,1(255) 데이터 구성하기

흑백이미지로 읽어내보기

img = cv2.imread('./data/pets.jpg', cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.imshow(img, cmap='gray')

이미지 이진화

img = cv2.imread('./data/ryan.jpg', cv2.IMREAD_GRAYSCALE)

이진화 -> cv2.threshold(대상, 임계값(기준값), 값, 이진화 종류(처리방식))

_,img_thr = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)

plt.subplot(행, 열, 순서)

plt.subplot(1,3,1)
plt.axis('off')     # 축 표시 안되게 설정
plt.imshow(img, cmap='gray')
plt.subplot(1,3,2)
plt.imshow(img_thr, cmap='gray')

  • 자동으로 임계값을 찾아주는 기능 적용하기 : Otsu(오츠)의 이진화

이미지 이진화

img = cv2.imread('./data/ryan.jpg', cv2.IMREAD_GRAYSCALE)

이진화 -> cv2.threshold(대상, 임계값(기준값), 값, 이진화 종류(처리방식))

_,img_thr = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)     # gray scale이 100이상인 것은 흰색(255)으로
th_val,img_thr2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)     # 자동으로 최적 임계값을 선택하는 알고리즘

plt.subplot(행, 열, 순서)

plt.subplot(1,3,1)
plt.title(f'original')
plt.axis('off')     # 축 표시 안되게 설정
plt.imshow(img, cmap='gray')
plt.subplot(1,3,2)
plt.title(f'thres: 100')
plt.axis('off')     
plt.imshow(img_thr, cmap='gray')
plt.subplot(1,3,3)
plt.title(f'otsu:{th_val}')
plt.axis('off')     
plt.imshow(img_thr2, cmap='gray')

0개의 댓글