π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
[v0.9]μμμ²λ¦¬_OpenCV_μ΄λ―Έμ§ μμννλ°©μ(BGR, HSV, YUV) λ³Έλ¬Έ
[v0.9]μμμ²λ¦¬_OpenCV_μ΄λ―Έμ§ μμννλ°©μ(BGR, HSV, YUV)
μ§μ§μνμΉ΄ 2021. 12. 30. 16:04211230 μμ±
<λ³Έ λΈλ‘κ·Έλ κ·νμ΄ μμ¬λμ λΈλ‘κ·Έλ₯Ό μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€>
https://bkshin.tistory.com/entry/OpenCV-7-%E3%85%87%E3%85%87?category=1148027
OpenCV - 7. μ΄λ―Έμ§ μμ νν λ°©μ(BGR, HSV, YUV)
μ΄λ² ν¬μ€ν μμλ OpenCVλ‘ μμμ νννλ λ°©μμ λν΄ μμλ³΄κ² μ΅λλ€. μ΄λ² ν¬μ€ν μμ 'νμ΄μ¬μΌλ‘ λ§λλ OpenCV νλ‘μ νΈ(μ΄μΈμ° μ )'λ₯Ό μ 리ν κ²μμ λ°νλλ€. μ½λ: github.com/BaekKyunShin/
bkshin.tistory.com
1. BGR, BGRA
1) RGB
: μμμ 0~2255 μ¬μ΄μ κ°μΌλ‘ νμ
: κ°μ΄ 컀μ§μλ‘ ν΄λΉ μμμ λΉμ΄ λ°μμ§λ€
: OpenCVλ λ°λ μμ BGR λ‘ νν
2) BGRA
: RGBμ A(alpha) κ° μΆκ°λ μμνκΈ°λ²
: Aλ λ°°κ²½μ ν¬λͺ λ (0~255 μ¬μ©νμ§λ§, 0 : κ²μμ, 255 : ν°μ μΌλ‘ μ£Όλ‘ μ°μ)
cv2.imread() ν¨μμ
: cv2.IMREAD_COLORλ₯Ό λ£μ΄μ£Όλ©΄ BGR λ°©μμΌλ‘ μ΄λ―Έμ§λ₯Ό μ½κΈ°
: cv2.IMREAD_UNCHANGEDμΈ κ²½μ° μ΄λ―Έμ§κ° μν μ±λμ κ°μ§κ³ μλ κ²½μ° BGRA λ°©μμΌλ‘ μ½κΈ°
# BGR, BGRA, Ahlpha μ±λ
import cv2
import numpy as np
# κΈ°λ³Έ κ° μ΅μ
img = cv2.imread('img/opencv_logo.png')
# IMREAD_COLOR μ΅μ
bgr = cv2.imread('img/opencv_logo.png', cv2.IMREAD_COLOR)
# IMREAD_UNCHANGED μ΅μ
bgra = cv2.imread('img/opencv_logo.png', cv2.IMREAD_UNCHANGED)
# κ° μ΅μ
μ λ°λ₯Έ μ΄λ―Έμ§ shape
print("default", img.shape, "color", bgr.shape, "unchanged", bgra.shape)
cv2.imshow('bgr', bgr)
cv2.imshow('bgra', bgra)
cv2.imshow('alpha', bgra[:,:,3]) # μν μ±λλ§ νμ
cv2.waitKey(0)
cv2.destroyAllWindows()
default (120, 98, 3) color (120, 98, 3) unchanged (120, 98, 4) -> ALPHA μ±λ λ μμ΄μ shape 4λ‘ λ³κ²½
μνμ±λ = λ§μ€ν¬ μ±λ
2. BGR μμ μ΄λ―Έμ§λ₯Ό νμμ‘° μ΄λ―Έμ§λ‘ λ³ννκΈ°
cv2.imread(img, cv2.IMREAD_GRAYSCALE)
1) νκ· κ°μ μ΄μ©νμ¬ νμμ‘° μ΄λ―Έμ§ λ³ν
# BGR μμ μ΄λ―Έμ§λ₯Ό νμμ‘° μ΄λ―Έμ§λ‘ λ³ν (bgr2gray.py)
import cv2
import numpy as np
img = cv2.imread('img/yate.jpg')
img2 = img.astype(np.uint16) # dtype λ³κ²½ ---β
b,g,r = cv2.split(img2) # μ±λ λ³λ‘ λΆλ¦¬ ---β‘
#b,g,r = img2[:,:,0], img2[:,:,1], img2[:,:,2]
gray1 = ((b + g + r)/3).astype(np.uint8) # νκ· κ° μ°μ°ν dtype λ³κ²½ ---β’
gray2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGRμ κ·Έλ μ΄ μ€μΌμΌλ‘ λ³κ²½ ---β£
cv2.imshow('original', img)
cv2.imshow('gray1', gray1)
cv2.imshow('gray2', gray2)
cv2.waitKey(0)
cv2.destroyAllWindows()
2) OpenCVμμ μ 곡νλ cv2.cvtcolor() ν¨μλ₯Ό μ΄μ©νμ¬ νμμ‘° μ΄λ―Έμ§ λ³ν
cv2.COLOR_BGR2GRAY
: BGR μμ μ΄λ―Έμ§λ₯Ό νμμ‘° μ΄λ―Έμ§λ‘ λ³ν
cv2.COLOR_GRAY2BGR
: νμμ‘° μ΄λ―Έμ§λ₯Ό BGR μμ μ΄λ―Έμ§λ‘ λ³ν
: μ€μ νμμ‘° μ΄λ―Έμ§λ₯Ό μκΉμ΄ μλ μ΄λ―Έμ§λ‘ λ°κΏμ€λ€λ λ» X
: 2μ°¨μμ λ°°μ΄μ κ°λ μ΄λ―Έμ§λ₯Ό 3κ° μ±λ λͺ¨λ κ°μ κ°μ κ°λ 3μ°¨μ λ°°μ΄λ‘ λ³ν O
cv2.COLOR_BGR2RGB
: BGR μμ μ΄λ―Έμ§λ₯Ό RGB μμ μ΄λ―Έμ§λ‘ λ³ν
cv2.COLOR_BGR2HSV
: BGR μμ μ΄λ―Έμ§λ₯Ό HSV μμ μ΄λ―Έμ§λ‘ λ³ν
cv2.COLOR_HSV2BGR
: HSV μμ μ΄λ―Έμ§λ₯Ό BGR μμ μ΄λ―Έμ§λ‘ λ³ν
cv2.COLOR_BGR2YUV
: BGR μμ μ΄λ―Έμ§λ₯Ό YUV μμ μ΄λ―Έμ§λ‘ λ³ν
cv2.COLOR_YUV2BGR
: YUB μμ μ΄λ―Έμ§λ₯Ό BGR μμ μ΄λ―Έμ§λ‘ λ³ν
3. HSV λ°©μ
: 3κ°μ μ±λμ κ°λ μμ μ΄λ―Έμ§ ννλ²
: H(Hue, μμ‘°, μ΄λ€ μμμΈμ§)
: S(Saturation, μ±λ, μμμ΄ μΌλ§λ μμνκ² ν¬ν¨λμ΄ μλμ§)
: V(Value, λͺ λ, μμμ΄ μΌλ§λ λ°μμ§ μ΄λμ΄μ§ νν)
# BGRμ HSVλ‘ λ³ν
import cv2
import numpy as np
#---β BGR μ»¬λ¬ μ€νμ΄μ€λ‘ μμ ν½μ
μμ±
red_bgr = np.array([[[0,0,255]]], dtype=np.uint8) # λΉ¨κ° κ°λ§ κ°λ ν½μ
green_bgr = np.array([[[0,255,0]]], dtype=np.uint8) # μ΄λ‘ κ°λ§ κ°λ ν½μ
blue_bgr = np.array([[[255,0,0]]], dtype=np.uint8) # νλ κ°λ§ κ°λ ν½μ
yellow_bgr = np.array([[[0,255,255]]], dtype=np.uint8) # λ
Έλ κ°λ§ κ°λ ν½μ
#---β‘ BGR μ»¬λ¬ μ€νμ΄μ€λ₯Ό HSV μ»¬λ¬ μ€νμ΄μ€λ‘ λ³ν
red_hsv = cv2.cvtColor(red_bgr, cv2.COLOR_BGR2HSV)
green_hsv = cv2.cvtColor(green_bgr, cv2.COLOR_BGR2HSV)
blue_hsv = cv2.cvtColor(blue_bgr, cv2.COLOR_BGR2HSV)
yellow_hsv = cv2.cvtColor(yellow_bgr, cv2.COLOR_BGR2HSV)
#---β’ HSVλ‘ λ³νν ν½μ
μΆλ ₯
print("red:",red_hsv)
print("green:", green_hsv)
print("blue", blue_hsv)
print("yellow", yellow_hsv)
red: [[[ 0 255 255]]]
green: [[[ 60 255 255]]]
blue [[[120 255 255]]]
yellow [[[ 30 255 255]]]
=> μμμ μμλ΄κΈ° μν΄μ RGB λ°©μμ μΈ κ°μ§ μ±λμ κ°μ λͺ¨λ μμμΌ ν¨
=> HSV λ°©μμ μ€μ§ Hκ° νλλ§ μλ©΄ λλ―λ‘ μ’ λ νΈλ¦¬νκ³ ν¨κ³Όμ
4. YUV, YcbCr λ°©μ
YUV = YCbCr λ°©μ
: Yλ λ°κΈ°(Luma)
: Uλ λ°κΈ°μ νλμκ³Όμ μμ μ°¨(Chroma Blue, Cb)
: Vλ λ°κΈ°μ λΉ¨κ°μκ³Όμ μμ μ°¨(Chroma Red, Cr)
: Y(λ°κΈ°)μλ λ§μ λΉνΈμλ₯Ό ν λΉνκ³ U(Cb)μ V(Cr)μλ μ μ λΉνΈμλ₯Ό ν λΉ => λ°μ΄ν°λ₯Ό μμΆνλ ν¨κ³Ό
# BGR κ°μ YUVλ‘ λ³ν
import cv2
import numpy as np
#---β BGR μ»¬λ¬ μ€νμ΄μ€λ‘ 3κ°μ§ λ°κΈ°μ ν½μ
μμ±
dark = np.array([[[0,0,0]]], dtype=np.uint8) # 3 μ±λ λͺ¨λ 0μΈ κ°μ₯ μ΄λμ΄ ν½μ
middle = np.array([[[127,127,127]]], dtype=np.uint8) # 3 μ±λ λͺ¨λ 127μΈ μ€κ° λ°κΈ° ν½μ
bright = np.array([[[255,255,255]]], dtype=np.uint8) # 3 μ±λ λͺ¨λ 255μΈ κ°μ₯ λ°μ ν½μ
#---β‘ BGR μ»¬λ¬ μ€νμ΄μ€λ₯Ό YUV μ»¬λ¬ μ€νμ΄μ€λ‘ λ³ν
dark_yuv = cv2.cvtColor(dark, cv2.COLOR_BGR2YUV)
middle_yuv = cv2.cvtColor(middle, cv2.COLOR_BGR2YUV)
bright_yuv = cv2.cvtColor(bright, cv2.COLOR_BGR2YUV)
#---β’ YUVλ‘ λ³νν ν½μ
μΆλ ₯
print("dark : ",dark_yuv)
print("middle : ", middle_yuv)
print("bright : ", bright_yuv)
dark : [[[ 0 128 128]]]
middle : [[[127 128 128]]]
bright : [[[255 128 128]]]
=> BGRκ°μ (0, 0, 0), (127, 127, 127), (255, 255, 255)λ‘ μ΄λμ΄ ν½μ , μ€κ° λ°κΈ°μ ν½μ , κ°μ₯ λ°μ ν½μ
=> Yκ°λ§ 0, 127, 255λ‘ λ°λλ€
=> μ¦ μ΄λμ΄ κ°μμ λ°μ κ°μΌλ‘ λ³ν
=> λ°κΈ°μ μ’ λ μ κ²½μ μ¨μΌ νλ€λ©΄ BGR λ°©μλ³΄λ€ YUV λ°©μμ μ¬μ©
==> μμ‘°λ₯Ό νλμ μκ³ μ νλ€λ©΄ HSV λ°©μμ μ¬μ©
==> YUV λ°©μμ λ°κΈ°μ λ μ κ²½μ μ¨μΌ νλ κ²½μ°μ μ¬μ©
'π©βπ» IoT (Embedded) > Image Processing' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[v0.11]μμμ²λ¦¬_μ΄λ―Έμ§ μ°μ° (ν©μ±, μν λΈλ λ©, λ§μ€νΉ) (0) | 2022.01.02 |
---|---|
[v0.10]μμμ²λ¦¬_OpenCV_λ°μ΄λ리 μ΄λ―Έμ§λ₯Ό λ§λλ μ€λ μνλ© (0) | 2021.12.30 |
[v0.8]μμμ²λ¦¬_OpenCV_μ΄λ―Έμ§ λ΄ κ΄μ¬μμ (ROI) (0) | 2021.12.30 |
[v0.7]μμμ²λ¦¬_OpenCV_μ°½ κ΄λ¦¬ λ° μ΄λ²€νΈ μ²λ¦¬ (0) | 2021.12.30 |
[v0.6]μμμ²λ¦¬_OpenCV_λν 그리기 (0) | 2021.12.28 |