Home OpenCV - 15. Hue, Saturation, Value(HSV)
Post
Cancel

OpenCV - 15. Hue, Saturation, Value(HSV)

HSV(Hue, Saturation, Value)

1

HSV(Hue, Saturation, Value) ๊ณต๊ฐ„์€ ์ƒ‰์ƒ์„ ํ‘œํ˜„ํ•˜๊ธฐ์— ๊ฐ„ํŽธํ•œ ์ƒ‰์ƒ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€์—์„œ ์ƒ‰์ƒ์„ ๊ฒ€์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ BGR์ด๋‚˜ RGB ํŒจํ„ด์œผ๋กœ๋Š” ์ธ๊ฐ„์ด ์ธ์ง€ํ•˜๋Š” ์˜์—ญ์˜ ์ƒ‰์ƒ์„ ๊ตฌ๋ณ„ํ•˜๊ธฐ์—๋Š” ๋งค์šฐ ์–ด๋ ต๊ณ  ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ HSV ์ƒ‰์ƒ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด ๊ฐ„ํŽธํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ํŠน์ • ์ƒ‰์ƒ์„ ๊ฒ€์ถœํ•˜๊ณ  ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ‰์ƒ(Hue)์€ ๋นจ๊ฐ„์ƒ‰, ๋…ธ๋ž€์ƒ‰, ํŒŒ๋ž€์ƒ‰ ๋“ฑ์œผ๋กœ ์ธ์‹๋˜๋Š” ์ƒ‰์ƒ ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” ๋‘˜์˜ ์กฐํ•ฉ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์‹œ๊ฐ์  ๊ฐ๊ฐ์˜ ์†์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

0ยฐ์—์„œ 360ยฐ์˜ ๋ฒ”์œ„๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ํŒŒ๋ž€์ƒ‰์€ 220ยฐ์—์„œ 260ยฐ ์‚ฌ์ด์— ์žˆ์Šต๋‹ˆ๋‹ค. OpenCV์—์„œ๋Š” 0 ~ 179์˜ ๋ฒ”์œ„๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

์ฑ„๋„(Saturation)๋Š” ์ด๋ฏธ์ง€์˜ ์ƒ‰์ƒ ๊นŠ์ด๋กœ, ์ƒ‰์ƒ์ด ์–ผ๋งˆ๋‚˜ ์„ ๋ช…ํ•œ(์ˆœ์ˆ˜ํ•œ) ์ƒ‰์ธ์ง€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•„๋ฌด๊ฒƒ๋„ ์„ž์ง€ ์•Š์•„ ๋ง‘๊ณ  ๊นจ๋—ํ•˜๋ฉฐ ์›์ƒ‰์— ๊ฐ€๊นŒ์šด ๊ฒƒ์„ ์ฑ„๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

0%์—์„œ 100%์˜ ๋น„์œจ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, 0%์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๋ฌด์ฑ„์ƒ‰, 100%์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ฐ€์žฅ ์„ ๋ช…ํ•œ(์ˆœ์ˆ˜ํ•œ)์ƒ‰์ด ๋ฉ๋‹ˆ๋‹ค. OpenCV์—์„œ๋Š” 0 ~ 255์˜ ๋ฒ”์œ„๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

๋ช…๋„(Value)๋Š” ์ƒ‰์˜ ๋ฐ๊ณ  ์–ด๋‘์šด ์ •๋„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋„๊ฐ€ ๋†’์„์ˆ˜๋ก ์ƒ‰์ƒ์ด ๋ฐ์•„์ง€๋ฉฐ, ๋ช…๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ƒ‰์ƒ์ด ์–ด๋‘์›Œ์ง‘๋‹ˆ๋‹ค.

0%์—์„œ 100%์˜ ๋น„์œจ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, 0%์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ฒ€์€์ƒ‰, 100%์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ฐ€์žฅ ๋ง‘์€์ƒ‰์ด ๋ฉ๋‹ˆ๋‹ค. OpenCV์—์„œ๋Š” 0 ~ 255์˜ ๋ฒ”์œ„๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

  • Tip : 0 ~ 360์˜ ๋ฒ”์œ„๋Š” 1 Byte(uint8)์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด, ์ ˆ๋ฐ˜์˜ ๊ฐ’์ธ 0 ~ 179์˜ ๋ฒ”์œ„๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.



๋ฉ”์ธ ์ฝ”๋“œ (1)

import cv2

src = cv2.imread("Image/14.jpg", cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

cv2.imshow("h", h)
cv2.imshow("s", s)
cv2.imshow("v", v)
cv2.waitKey()
cv2.destroyAllWindows()


์„ธ๋ถ€ ์ฝ”๋“œ

hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

์ƒ‰์ƒ ๊ณต๊ฐ„ ๋ณ€ํ™˜ ํ•จ์ˆ˜(cv2.cvtcolor)๋กœ ์ด๋ฏธ์ง€์˜ ์ƒ‰์ƒ ๊ณต๊ฐ„์„ BGR์—์„œ HSV๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์ฑ„๋„๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฑ„๋„ ๋ถ„๋ฆฌ ํ•จ์ˆ˜(cv2.split)๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

mv = cv2.threshold(src)๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€(src)์˜ ์ฑ„๋„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐฐ์—ด(mv)์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • Tip : ๋ถ„๋ฆฌ๋œ ์ฑ„๋„๋“ค์€ ๋‹จ์ผ ์ฑ„๋„์ด๋ฏ€๋กœ ํ‘๋ฐฑ์˜ ์ƒ‰์ƒ์œผ๋กœ๋งŒ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.



์ถœ๋ ฅ ๊ฒฐ๊ณผ

Hue

2


Saturation

3


Value

4



๋ฉ”์ธ ์ฝ”๋“œ (2)

import cv2

src = cv2.imread("Image/tomato.jpg", cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

h = cv2.inRange(h, 8, 20)
orange = cv2.bitwise_and(hsv, hsv, mask = h)
orange = cv2.cvtColor(orange, cv2.COLOR_HSV2BGR)

cv2.imshow("orange", orange)
cv2.waitKey()
cv2.destroyAllWindows()


์„ธ๋ถ€ ์ฝ”๋“œ

h = cv2.inRange(h, 8, 20)
orange = cv2.bitwise_and(hsv, hsv, mask = h)
orange = cv2.cvtColor(orange, cv2.COLOR_HSV2BGR)

Hue์˜ ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•˜์—ฌ ํŠน์ • ์ƒ‰์ƒ์˜ ๋ฒ”์œ„๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด ์š”์†Œ์˜ ๋ฒ”์œ„ ์„ค์ • ํ•จ์ˆ˜(cv2.inRange)๋กœ ์ž…๋ ฅ๋œ ๋ฐฐ์—ด์˜ ํŠน์ • ๋ฒ”์œ„ ์˜์—ญ๋งŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dst = cv2.inRange(src, lowerb, upperb)๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€(src)์˜ ๋‚ฎ์€ ๋ฒ”์œ„(lowerb)์—์„œ ๋†’์€ ๋ฒ”์œ„(upperb) ์‚ฌ์ด์˜ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

์ฃผํ™ฉ์ƒ‰์€ ์•ฝ 8 ~ 20 ๋ฒ”์œ„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ดํ›„, ํ•ด๋‹น ์ถ”์ถœํ•œ ์˜์—ญ์„ ๋งˆ์Šคํฌ๋กœ ์‚ฌ์šฉํ•ด ์ด๋ฏธ์ง€ ์œ„์— ๋ง์”Œ์›Œ ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋น„ํŠธ ์—ฐ์‚ฐ AND(cv2.bitwise_and)๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งˆ์Šคํฌ๋ฅผ ๋ง์”Œ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dst = cv2.bitwise_and(src1, src2, mask)๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€1(src1)๊ณผ ์ž…๋ ฅ ์ด๋ฏธ์ง€2(src2)์˜ ํ”ฝ์…€์˜ ์ด์ง„๊ฐ’์ด ๋™์ผํ•œ ์˜์—ญ๋งŒ AND ์—ฐ์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํฌ ์˜์—ญ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๋งˆ์Šคํฌ ์˜์—ญ๋งŒ AND ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์˜์—ญ(๋งˆ์Šคํฌ)์˜ AND ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋๋‹ค๋ฉด ๋‹ค์‹œ HSV ์ƒ‰์ƒ ๊ณต๊ฐ„์—์„œ BGR ์ƒ‰์ƒ ๊ณต๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.



์ถœ๋ ฅ ๊ฒฐ๊ณผ

5

OpenCV - 14. ๊ฐ€์žฅ์ž๋ฆฌ ๊ฒ€์ถœ

OpenCV - 16. ๋ฐฐ์—ด ๋ณ‘ํ•ฉ(Array Merge)