[OpenCV] ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ์˜์—ญ(๊ด€์‹ฌ์˜์—ญ, ROI) ์ž๋ฅด๊ธฐ(Crop)

๋ฐ˜์‘ํ˜•

๋ธ”๋กœ๊ทธ ๊ธ€์„ ์“ฐ๋‹ค๋ณด๋ฉด ํŠน์ • ์˜์—ญ๋งŒ์„ ์ž˜๋ผ์„œ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œˆ๋„๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์œˆ๋„์—์„œ ์ œ๊ณตํ•˜๋Š” Windows ์‚ฌ์ง„ ๋ทฐ์–ด ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ์˜์—ญ์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š”๋ฐ, Mac OS X๋‚˜ Ubuntu์— ์žˆ๋‹ค๋ณด๋ฉด ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์“ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žฆ์•˜๋Š”๋ฐ์š”.

 

์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์›ํ•˜๋Š” ์˜์—ญ์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

MouseEvent

OpenCV์—์„œ MouseEvent๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”.

 

2016.12.18 - [Programming/OpenCV] - OpenCV์—์„œ Mouse Event๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

 

OpenCV์—์„œ Mouse Event๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

์ €์—๊ฒŒ ๋งก๊ฒจ์ง„ 3๊ฐœ์˜ ํ”„๋กœ์ ํŠธ์™€ ๊ธฐ๋ง๊ณ ์‚ฌ๊ฐ€ ๋“œ๋””์–ด ๋์ด๋‚ฌ๋„ค์š”. ์ด๋Ÿฐ์ €๋Ÿฐ ์ผ๋“ค์ด ๋งŽ์•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์— ๋Œ€ํ•ด ์†Œํ™€ํ•ด์ง€๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”. ์˜ค๋Š˜์€ ์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ OpenCV๋ฅผ ์ด

blog.neonkid.xyz

์ด๋ฅผ ํ† ๋Œ€๋กœ ์šฐ๋ฆฌ๋Š” ์›ํ•˜๋Š” ์˜์—ญ์„ ์ž๋ฅด๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

ROI (Region Of Interest)

์ด๋ฏธ์ง€์—์„œ ์›ํ•˜๋Š” ์˜์—ญ์„ Computer Vision์—์„œ๋Š” ๊ด€์‹ฌ ์˜์—ญ์ด๋ผ๊ณ  ์–˜๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ROI๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š”๋ฐ์š”. ์ปดํ“จํ„ฐ ๋น„์ „์—์„œ ๊ด€์‹ฌ ์˜์—ญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Rect, Point๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์˜ ์›๋ณธ๊ณผ ๊ด€์ฐฐํ•˜๋ ค๋Š” ๋Œ€์ƒ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜์ƒ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๋ณธ๋ž˜ ์ด๋ฏธ์ง€๊ฐ€ srcImage์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ roi๋ผ๋Š” ๋ณ€์ˆ˜์— ํŠน์ • ์œ„์น˜์— ํŠน์ • ํฌ๊ธฐ๋งŒํผ ์›ํ•˜๋Š” ์˜์—ญ์„ ๊ฐ€์ ธ์™€ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

์‹ค์ œ๋กœ ๊ฐ€์ ธ์™€๋ณด๋ฉด ์ด๋Ÿฐ ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์ฃ . ์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ์™ผ์ชฝ, ์ œ๊ฐ€ ์›ํ•˜๋Š” ๋ถ€๋ถ„์€ ์ด๋ฏธ์ง€์˜ ์ž…์ชฝ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ž…์ชฝ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ์ด๋ ‡๊ฒŒ ์ž˜๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฅด๊ธฐ, ์ปดํ“จํ„ฐ ๋น„์ „์—์„œ๋Š” ROI, ๊ด€์‹ฌ ์˜์—ญ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ฝ”๋“œ๋กœ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์˜์—ญ์ด ์–ด๋””์ธ์ง€๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์ด์šฉํ•ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ด€์‹ฌ ์˜์—ญ์„ ์ง์ ‘ ๋“œ๋ž˜๊ทธํ•ด์„œ ์งœ๋ฅด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒˆ ๊ธ€์˜ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

 

 

 

Develop

์ž ์ด์ œ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๊ตฌํ˜„ ์›๋ฆฌ๋ฅผ ์•Œ์•˜์œผ๋‹ˆ ์ด์ œ ๊ตฌํ˜„์— ๋“ค์–ด๊ฐ€๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ์ง€ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ๋†“์•˜์„ ๋•Œ ์–ด๋–ค ์˜์—ญ์„ ๋“œ๋ž˜๊น…ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ img_draw ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋‚˜์ค‘์— ๋ณต๊ตฌ๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋“œ๋ž˜๊น…ํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” matrix๋ฅผ ๋ณ„๋„์˜ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

  • EVENT_LBUTTONDOWN: ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์žˆ์„ ๋•Œ.
  • EVENT_MOUSEMOVE: ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์ด๊ณ  ์žˆ์„ ๋•Œ.
  • EVENT_LBUTTONUP: ๋งˆ์šฐ์Šค ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋—์„ ๋•Œ.

 

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” 3๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์˜์—ญ์„ ๋“œ๋ž˜๊น… ํ•˜๊ณ  ์žˆ์„ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ LBUTTONDOWN๊ณผ MOUSEMOVE๋กœ drag ์ค‘์ธ์ง€๋ฅผ ๋ณ€์ˆ˜๋กœ ํ™•์ธํ•˜๊ณ , drag ์ค‘์ด๋ฉด ์ด ๋•Œ๋ถ€ํ„ฐ rectangle์„ ๋งˆ์šฐ์Šค ์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๊ทธ๋ ค๋‚˜๊ฐ€๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋—์„ ๋•Œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์˜์—ญ ์„ ํƒ์„ ๋งˆ์ณค์œผ๋ฏ€๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๋“œ๋ž˜๊ทธํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋˜ ๋ถ€๋ถ„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„๊นŒ์ง€์˜ x, y ์ขŒํ‘œ์™€ width, height๋ฅผ ๊ณ„์‚ฐํ•ด ๋ณ€์ˆ˜๋กœ ๋„ฃ์Šต๋‹ˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ callback ํ•จ์ˆ˜์˜ x, y๊ฐ€ ์›๋ณธ ์ด๋ฏธ์ง€์˜ x, y์ด๊ณ , gx, gy๊ฐ€ ๋“œ๋ž˜๊ทธ ํ•˜๋Š” ์ดˆ๊ธฐ ์‹œ์ ๋ถ€ํ„ฐ์˜ x, y ์ขŒํ‘œ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๋ฅผ ์ž๋ฅธ ์˜์—ญ์ด roi ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์—ˆ์œผ๋ฉด ์›ํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋„๋ก imwrite ํ•จ์ˆ˜์— ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ด๋ฆ„์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ œ๊ฐ€ ์›ํ•˜๋Š” ๋กœ๋ด‡์˜ ์ž… ๋ถ€๋ถ„๋งŒ ๋“œ๋ž˜๊ทธ๋ฅผ ํ–ˆ์„ ๋•Œ ์ €๋ ‡๊ฒŒ ์˜ค๋ฅธ์ชฝ์—์„œ ์ž… ๋ถ€๋ถ„๋งŒ ์ž˜๋ผ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์ด๋ฏธ์ง€๋ฅผ Cropํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•œ ์ผ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ•ญ์ƒ ์“ธ๋งŒํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๋‹ค๋ณด๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฐ€๊ธฐ ๋งˆ๋ จ์ด๋ผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜๋Š” ์—†์„๊นŒ ํ•˜๋‹ค ๋‹ค์‹œ OpenCV๋กœ ์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

C++๊ฐ€ ์–ด๋ ต๋‹ค๋ฉด Python์œผ๋กœ๋„ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ Python์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด C++ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์‹œ๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments