๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸช Computer Vision

์ปดํ“จํ„ฐ ๋น„์ „ | Drawing rect, line, circle, polygon, text

by UKHYUN22 2022. 10. 3.
728x90

 

๋‹ค์Œ์€ ์ง์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ์ฒซ ๋ฒˆ์งธ img๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€์— ์ด์ œ Rect๋ฅผ ๊ทธ๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Point๊ฐ€ 2๋ฒˆ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ๋Š” ๋นจ๊ฐ„์ƒ‰ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Left-Top ๊ณผ Right-Bottom์— ๋Œ€ํ•œ ์ ์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์งˆ ๊ฒƒ์ด๋‹ค. ์„ธ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ง์‚ฌ๊ฐํ˜•์˜ ๋ฐ๊ธฐ ๋˜๋Š” ์ƒ‰์ƒ์˜ ๊ฐ’์„ ๋„ฃ๊ฒŒ ๋œ๋‹ค. ๋„ค ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” Thinkness์— ๋Œ€ํ•œ ๊ฒƒ์œผ๋กœ ์ง์‚ฌ๊ฐํ˜•์˜ ํ…Œ๋‘๋ฆฌ์˜ ๋‘๊ป˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์„ฏ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” LineType์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 4 ๋˜๋Š” 8๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์˜๋ฏธ๋Š” ๋’ค์—์„œ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์œผ๋กœ ํ•˜์ž. ๋งˆ์ง€๋ง‰ ์—ฌ์„ฏ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 0์œผ๋กœ ์ง€์ •์„ ํ•ด์•ผ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ง์‚ฌ๊ฐํ˜•์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ 2๊ฐœ์˜ Point๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Rect๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง์ ‘ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. Rect ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ Left-Top์˜ x, y ์ขŒํ‘œ๋ฅผ ๋„ฃ๊ณ  Width์™€ Height์˜ ๊ฐ’์„ ๋„ฃ์–ด์„œ ํ•ด๋‹น ์ง์‚ฌ๊ฐํ˜•์— ๋Œ€ํ•œ ์ขŒํ‘œ์™€ ํฌ๊ธฐ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. Point๋ฅผ ์ •ํ™•ํžˆ ์ฃผ๊ธฐ ํž˜๋“  ๊ฒฝ์šฐ Rect ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋Œ€๋žต์ ์œผ๋กœ ๋จผ์ € ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๊ณ  rectangle ํ•จ์ˆ˜์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง‘์–ด๋„ฃ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค.

 

์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ Rect ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋จผ์ € ์ง์‚ฌ๊ฐํ˜•์˜ ์ •๋ณด๋ฅผ Rect์— ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋‹ด์€ ๋’ค rectangle์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง‘์–ด๋„ฃ๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ณผ ์‚ฌ์ง„์ด ๋‹ค์Œ์ฒ˜๋Ÿผ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ๋กœ ์„ ์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ดํŽด๋ณด์ž. ์ฒซ ๋ฒˆ์งธ๋Š” ์„ ์„ ๊ทธ๋ฆฌ๊ฒŒ ๋˜๋Š” Input Image๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. 2๋ฒˆ์งธ, 3๋ฒˆ์งธ๋Š” ๋™์ผํ•˜๊ฒŒ ์ง์‚ฌ๊ฐํ˜•์˜ Left-Top๊ณผ Right-bottom ์˜ ์ขŒํ‘œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. 4๋ฒˆ์งธ๋Š” ์ง์„ ์˜ ์ƒ‰ ๋˜๋Š” ๋ฐ๊ธฐ ์ •๋ณด๋ฅผ ๋„ฃ๊ฒŒ ๋˜๊ณ  5 ๋ฒˆ์งธ๋Š” ์„ ์˜ ๋‘๊ป˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 6 ๋ฒˆ์งธ๋Š” lineType์„ ๋„ฃ๊ฒŒ ๋˜๋Š”๋ฐ 4 ๋˜๋Š” 8๋กœ ๋„ฃ๊ฒŒ ๋œ๋‹ค. 4 connected์˜ ๊ฒฝ์šฐ ๋Œ€๊ฐ์„ ์ด ์•„๋‹Œ ์ƒํ•˜์ขŒ์šฐ์˜ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ neighbor๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ  8 connected์˜ ๊ฒฝ์šฐ ๋Œ€๊ฐ์„ ๊นŒ์ง€ Neighbor๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ฐจ์ด์ด๋‹ค. (์ด ์ฐจ์ด๋ฅผ ์ž˜ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.) 

 

Circle์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฐจ์ด์ ๋งŒ ์•Œ๋ฉด ๋œ๋‹ค. ์ค‘์•™์˜ ์ขŒํ‘œ์™€ ๋ฐ˜์ง€๋ฆ„์˜ ๊ธธ์ด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค. 

 

Point ๋‘ ์ ์„ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜๊ณ  Line ํ•จ์ˆ˜์— 2,3๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ’์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ์˜ค๋ฅธ์ชฝ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์„ ์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค๊ฐํ˜• ๋˜ํ•œ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์— ์ฐจ์ด์ ์€ ๋ฌด์—‡์ด ๋˜๊ฒ ๋Š”๊ฐ€?? ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค๊ฐํ˜•์˜ ์ขŒํ‘œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ์ด์ค‘ ํฌ์ธํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ง์€ 2์ฐจ์› ๋ฐฐ์—ด์ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๋œป์œผ๋กœ ๋ฐ›์•„๋“œ๋ฆฌ๋ฉด ๋œ๋‹ค. ์ž์„ธํ•œ ๊ฒƒ์„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์ดํ•ดํ•˜๋ฉด ํ›จ์”ฌ ๋” ์ž˜ ์™€ ๋‹ฟ์„ ๊ฒƒ์ด๋‹ค.

 

 

Point ํ˜•์‹์œผ๋กœ trapezoid๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ Point๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธ์„ ํ•˜๊ณ  const Point* ํƒ€์ž…์œผ๋กœ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์„ ์–ธ์„ ํ•ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด 2์ฐจ์› ํฌ์ธํ„ฐ ํƒ€์ž…์— ๋งž๋„๋ก ๋ณ€๊ฒฝ์„ ์™„๋ฃŒํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  3 ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋‹ค๊ฐํ˜•์˜ ์ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋˜์ง€๋งŒ ์ด ์—ญ์‹œ ํฌ์ธํ„ฐ๋กœ ํ‘œํ˜„์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— int npt[] = { 4 };  ์ฒ˜๋Ÿผ ๋ฐฐ์—ด ์„ ์–ธ์„ ํ•ด์ค€ ๋’ค ์ฃผ์†Œ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ๊ฒŒ ๋œ๋‹ค.

 

 

Text๋ฅผ ์“ฐ๋Š” ํ•จ์ˆ˜๋„ ์กด์žฌํ•œ๋‹ค. ์„ ๊ณผ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋Œ€๋ถ€๋ถ„ ๋น„์Šทํ•˜์ง€๋งŒ 2๋ฒˆ์งธ~ 4๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด์ž. 2๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„ฃ๊ณ ์ž ํ•˜๋Š” Text์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ๊ฒŒ ๋œ๋‹ค. 3 ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” Left-Bottom ์˜ ์ขŒํ‘œ๋ฅผ ๋„ฃ๊ฒŒ ๋œ๋‹ค. 4 ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ fontFace๋Š” ํฐํŠธ์˜ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธ€๊ผด๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. fontScale์˜ ๊ฒฝ์šฐ Default๋กœ ์ง€์ •๋œ ํฐํŠธ์˜ ๊ธฐ๋ณธ ํฌ๊ธฐ์— ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” True / False์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, True์˜ ๊ฒฝ์šฐ Left-Bottom์—์„œ ์‹œ์ž‘์„ ํ•˜๋ฉฐ False์˜ ๊ฒฝ์šฐ Left-Top์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค. 

 

 

ํ•ญ์ƒ ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ณผ ๋•Œ default๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’๋“ค์„ ๊ตฌ๊ธ€๋งํ•ด์„œ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ค ๊ฐ’๋“ค์ด Default๋กœ ๋“ค์–ด๊ฐ€๋Š”์ง€ ์‚ดํŽด๋ณด๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž.

 

 

 

 

๋‹ค์Œ์œผ๋กœ๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. Bin ์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ์ ์ ˆํ•œ ํฌ๊ธฐ์˜ bin ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ด์–ด์„œ ๊ณ„์† ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด equalizeHist ํ•จ์ˆ˜์™€ drawHistogram ํ•จ์ˆ˜๊ฐ€ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. drawHistogram์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„์„ ํ•ด์•ผํ•˜๊ณ  equalizeHist๋Š” CV์—์„œ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

DrawHistogram ํ•จ์ˆ˜์ด๋‹ค. ์ง์ ‘ ๋ถ„์„ํ•˜๋ฉด์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์ž!

 

 

์‚ฌ์‹ค ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— Write๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ด๋ฒˆ์—๋Š” ๊ฑฐ์˜ ์—†์„ ๊ฒƒ์ด๋‹ค.