Color Space

정승균·2021년 1월 19일
0

OpenCV

목록 보기
3/7
post-thumbnail

Ⅰ. 색상 공간 변경


  • dst = cv.cvtColor(src, code)

    • src : input image
    • code : 색상 변환 코드
  • 색상 변환 코드

    • COLOR_BGR2GRAY : BGR에서 Grayscale로
    • COLOR_BGR2HSV : BGR에서 HSV로 (8비트 이미지인 경우 H는 0~179 범위를 가짐)
    • COLOR_GRAY2BGR : 1채널에서 3채널로
    • 등등
import cv2

color_img = cv2.imread("src/ex_codes/opencv.png", cv2.IMREAD_COLOR)
grayscale_img = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY)

cv2.imshow("color", color_img)
cv2.imshow("grayscale", grayscale_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


Ⅱ. 채널 분리/병합


  • mv = cv.split(m) : 채널 분리
  • dst = cv.merge(mv) : 채널 병합
import cv2

src = cv2.imread("src/ex_codes/opencv.png", cv2.IMREAD_COLOR)
b, g, r = cv2.split(src)
inversebgr = cv2.merge((r, g, b))

cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
cv2.imshow("inverse", inversebgr)
cv2.waitKey(0)
cv2.destroyAllWindows()


Ⅲ. masking


  • HSV 색상 공간에서 자주 쓰임 (특정 색이나 명도의 픽셀만 뽑고 싶을 때)

  • dst = cv.inRange(src, lowerb, upperb) : 채널별 범위로 마스킹

    • src : input 이미지
    • lowerb : 채널별 하한값 ndarray
    • upperb : 채널별 상한값 ndarray
  • dst = cv.bitwise_and(src1, src2 , mask = mask) : 픽셀간 비트 연산

    • src1 : 첫번째 이미지
    • src2 : 두번째 이미지
    • mask : 연산 적용 범위
import cv2
import numpy as np

src = cv2.imread("src/ex_codes/person.jpeg", cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

mask = cv2.inRange(hsv, np.array([0, 0, 200]), np.array([255, 255, 255]))
res = cv2.bitwise_and(src, src, mask = mask)

cv2.imshow('frame', src)
cv2.imshow('mask', mask)
cv2.imshow('res', res)

cv2.waitKey(0)
cv2.destroyAllWindows()

0개의 댓글