๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Frontend

[2023.04.11~04.16] ํ† ์ด ํ”„๋กœ์ ํŠธ: OpenCV ์—†์ด JavaScript๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด

by HanaV 2023. 4. 18.
728x90

 

ํ”„๋กœ์ ํŠธ ๋ช…: OpenCV ์—†์ด JavaScript๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด

์˜์ƒ์ฒ˜๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ๋Œ€๋ถ€๋ถ„ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์–ด ์žˆ๋Š” OpenCV๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. OpenCV๋Š” Open Source Computer Vision์˜ ์•ฝ์ž๋กœ ๋‹ค์–‘ํ•œ ์˜์ƒ/๋™์˜์ƒ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ธํ…”์ด ์ปดํ“จํ„ฐ ๋น„์ „๊ณผ ์ธ๊ณต์ง€๋Šฅ์„ ๋ฐœ๋‹ฌ์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ๋ฐ”๋žŒ์œผ๋กœ ์ถœ์‹œํ•œ ๊ฒƒ์ด๋‹ค. 

ํ•˜์ง€๋งŒ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” OpenCV๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , JavaScript, HTML5, CSS์œผ๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œํ™”ํ•˜์—ฌ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋จผ์ € ์ตœ์ข… ์™„์„ฑ๋œ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์—ฐ ์˜์ƒ์ด๋‹ค.

 

 

Step 1: ๊ฐ„๋‹จํ•œ ๋‚œ์ˆ˜ ๋ฐฐ์—ด๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•ด๋ณด๊ธฐ

์˜์ƒ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ”๋กœ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ ์šฉ์‹œํ‚ค๊ธฐ ์ „์—, ๋‹จ์ˆœํ•œ ๋‚œ์ˆ˜ ๋ฐฐ์—ด์— ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„์„ ํ•ด๋ณด๋‹ˆ ์ดํ•ดํ•˜๊ธฐ๋„ ํ›จ์”ฌ ์‰ฌ์› ๊ณ , ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๋Š” ๊ฒƒ๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ์ดํ•ดํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค. 
๋‚œ์ˆ˜ ๋ฐฐ์—ด์— ์ ์šฉ์‹œํ‚จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋„ ๋˜‘๊ฐ™์ด ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ, ์ž์„ธํžˆ ๋ณด๊ณ ์‹ถ์œผ๋ฉด ๋ฐ‘์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋œ๋‹ค.

๋‚œ์ˆ˜ ๋ฐฐ์—ด์— ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉํ•˜๊ธฐ: https://hanav.tistory.com/130

 

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Alpha ver.) : ์ด๋ฏธ์ง€ ๋ฐ๊ธฐ์กฐ์ ˆ, ์ƒ‰์ƒ ๋ณ€๊ฒฝ, ๋ฏธ๋Ÿฌ๋ง, ํšŒ์ „,

*์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต์šฉ์œผ๋กœ rgb๋ฅผ ์ž„์˜์˜ ์ˆซ์ž(math.random()*256)๋กœ ๋Œ€์ฒดํ•จ. *์ •์‚ฌ๊ฐํ˜•์ธ GrayScale์ด๋ฏธ์ง€๋ผ ๊ฐ€์ •ํ•จ. 1. ์ด๋ฏธ์ง€ ์›๋ณธ ๊ทธ๋Œ€๋กœ //ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€ function display(image, height, width) { for(var i=0; i

hanav.tistory.com

 

Step2: RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉํ•ด๋ณด๊ธฐ

์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉ์‹œ์ผœ๋ดค๋‹ค๋ฉด, ์‹ค์ œ RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ ์šฉ์„ ์‹œ์ผœ๋ณผ ์ฐจ๋ก€์ด๋‹ค. RAW ์ด๋ฏธ์ง€๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋‚ ๊ฒƒ์˜, ๊ฐ€๊ณต๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์ด๋‹ค.  JPEG, PNG ๋“ฑ์€ ์ด๋ฏธ ๊ฐ€๊ณต๋˜์–ด ์••์ถ•๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ๋ผ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ, RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ๋น›์„ ์ „๊ธฐ์‹ ํ˜ธ๋กœ ๊ธฐ๋กํ•œ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ์ž์ฒด์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚œ์ˆ˜ ๋ฐฐ์—ด์ด ์•„๋‹Œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ ์šฉํ•  ๋•Œ๋Š” ๊ณ ๋ คํ•ด์•ผํ•  ์ ์ด ์žˆ๋‹ค.
๋จผ์ € ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ RGB๊ฐ’๊ณผ Alpha ๊ฐ’์ด ๋ฌถ์—ฌ์„œ ํ•˜๋‚˜์˜ ํ”ฝ์…€๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋‚œ์ˆ˜ ๋ฐฐ์—ด์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ”ฝ์…€์ด ํ•˜๋‚˜์˜ ์ˆซ์ž์˜€๋‹ค๋ฉด, ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ๋Š” (r, g, b, alpha) ๊ฐ€ ํ•˜๋‚˜์˜ ํ”ฝ์…€์ด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ์นผ๋ผ ์‚ฌ์ง„์„ ์ ์šฉ์‹œํ‚จ๋‹ค๋ฉด RGB๊ฐ’์ด ๋ชจ๋‘ ๋‹ฌ๋ผ ์‚ผ์ฐจ์› ๋ฐฐ์—ด์„ ์„ค์ •ํ•ด์•ผ ํ•˜๊ฒ ์ง€๋งŒ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ GrayScale ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. GrayScale ์ด๋ฏธ์ง€๋Š” R=G=B (Alpha ๊ฐ’๋„ 255, ํˆฌ๋ช…๋„๊ฐ€ ์—†๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์‚ฌ์šฉ)์ด๋ฏ€๋กœ ์ด์ฐจ์› ๋ฐฐ์—ด๋งŒ ์žˆ์–ด๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ, HTML5 ์บ”๋ฒ„์Šค๋Š” ์„ ๊ณผ ๋ฉด์€ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ ์€ ํ‘œํ˜„ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ”ฝ์…€๊ฐ’ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๋ชจ์—ฌ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š”๋ฐ, ์ด๋Š” ํ”ฝ์…€ ๊ฐ’์„ ๋ชจ์•„์„œ ์ž„์˜์˜ ์ข…์ด์— ๋จผ์ € ๋ถ™์ด๊ณ , ์ข…์ด๋ฅผ ์บ”๋ฒ„์Šค์— ๋ถ™์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์— ๋ชจ์•„์„œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ ์งœ๊ธฐ: https://hanav.tistory.com/132

 

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): RAW ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Alpha ๋ฒ„์ „์—์„œ๋Š” ๋‚œ์ˆ˜๋กœ ํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ํ•œ ๋‹จ๊ณ„๋ฅผ ์—…ํ•ด์„œ ์ง„์งœ ์ด๋ฏธ์ง€์— ์˜์ƒ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ผ๋ฐ˜ ํŒŒ์ผ(BMP, JPG, PNG, TIF, GIF ๋“ฑ)์€ ์ด๋ฏธ์ง€์ฒ˜๋ฆฌํ•˜๊ธฐ ๋งŽ์ด ์–ด๋ ค์šด๋ฐ, RAW ์ด๋ฏธ

hanav.tistory.com

 

Step3: ์˜์ƒ์ฒ˜๋ฆฌ ์‹ฌํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•™์Šตํ•˜๊ณ  ์ ์šฉํ•ด๋ณด๊ธฐ

1) ํ™”์†Œ ์  ์ฒ˜๋ฆฌ

ํ™”์†Œ ์  ์ฒ˜๋ฆฌ๋ž€, ์ฃผ๋ณ€ ํ™”์†Œ ๊ฐ’์— ์ƒ๊ด€์—†์ด ๋‹จ์ˆœํžˆ ๊ทธ ๊ฐ’๋งŒ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ, ๋‚˜๋ˆ„๊ธฐ์˜ ์‚ฐ์ˆ ์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ”ฝ์…€์˜ ๊ฐ’์ด ์ปค์งˆ์ˆ˜๋ก ๋ช…๋„๊ฐ€ ๋†’์•„์ง„๋‹ค๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ฉด, ์‚ฐ์ˆ ์—ฐ์‚ฐ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

-๋”ํ•˜๊ธฐ = ๋ฐ๊ฒŒ ํ•˜๊ธฐ
-๋นผ๊ธฐ = ์–ด๋‘ก๊ฒŒ ํ•˜๊ธฐ
-๊ณฑํ•˜๊ธฐ = ๋ฐ๊ฒŒํ•˜๋Š”๋ฐ ๋ฐ์€ ๊ณณ์€ ๋” ๋ฐ์•„์ง€๊ณ , ์–ด๋‘์šด ๊ณณ์€ ๋œ ๋ฐ์•„์ง€๊ฒŒ ํ•˜๊ธฐ
-๋‚˜๋ˆ„๊ธฐ = ์–ด๋‘ก๊ฒŒ ํ•˜๋Š”๋ฐ ์–ด๋‘์šด ๊ณณ์€ ๋” ์–ด๋‘์›Œ์ง€๊ณ , ๋ฐ์€ ๊ณณ์€ ๋œ ์–ด๋‘ก๊ฒŒ ํ•˜๊ธฐ

๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ์™€ ๋‚˜๋ˆ„๊ธฐ๋Š” ๊ฒฐ๊ตญ ๊ฐ™์œผ๋ฏ€๋กœ ๊ฐ™์ด ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ•˜์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  0๋ถ€ํ„ฐ 255๊นŒ์ง€์˜ ๊ฐ’๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, 0์ด๋‚˜ 255๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ๊ฐ 0๊ณผ 255๋กœ ๋ฐ›๋„๋ก ์ œํ•œ์กฐ๊ฑด๋„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

                        if (inImage[i][k] + value < 0 )
                            outImage[i][k] = 0;
                        else if (inImage[i][k] + value > 255 )
                            outImage[i][k] = 255;
                        else 
                            outImage[i][k] = inImage[i][k]+value;
                        outImage[i][k] = inImage[i][k] * value;


๋˜ํ•œ, ์ƒ‰์ƒ์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ๋„ ์ตœ๋Œ€ ๋ช…๋„๊ฐ’์ธ 255์—์„œ ์ด์ „ ํ”ฝ์…€๊ฐ’์„ ๋นผ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

                        outImage[i][k] = 255 - inImage[i][k];

๋ช…๋„๊ฐ€ ๋ณ€ํ•  ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง€์ง€ ์•Š๊ณ  ๊ฒฝ๊ณ„๊ฐ€ ์ง€๋ฉด์„œ ๋ฏธ๊ตญ ์นดํˆฐ ๋Š๋‚Œ์ด ๋‚˜๋„๋ก ๋ณด์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 
0~255๊นŒ์ง€ ๋ฒ”์œ„๋ฅผ ์ •ํ•ด ์ผ์ • ๋ฒ”์œ„๋Š” ๊ฐ™์€ ํ”ฝ์…€๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

2) ํžˆ์Šคํ† ๊ทธ๋žจ ์ฒ˜๋ฆฌ

ํžˆ์Šคํ† ๊ทธ๋žจ์ด๋ž€ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋ณด๋˜ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. (๋ง‰๋Œ€๊ทธ๋ž˜ํ”„์™€์˜ ์ฐจ์ด์ ์ด๋ผ๋ฉด, ํžˆ์Šคํ† ๊ทธ๋žจ์€ ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ๋˜์–ด์„œ ๋ง‰๋Œ€ ์‚ฌ์ด์— ๋นˆ์นธ์ด ์—†๋‹ค๋Š” ์ ์ด๋‹ค) ๊ฐ€๋กœ์ถ•์—๋Š” ๋ช…๋„, ์„ธ๋กœ์ถ•์—๋Š” ๊ทธ ๋ช…๋„๊ฐ’์„ ๊ฐ€์ง„ ํ™”์ˆ˜์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ์œผ๋กœ ๋ช…๋„์˜ ๋ถ„ํฌ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…๋„ ๋Œ€๋น„์— ๋ณ€ํ™”๋ฅผ ์ค„  ์ˆ˜ ์žˆ๋‹ค.

ํžˆ์Šคํ† ๊ทธ๋žจ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์ผ ๊ฐ„๋‹จํ•œ ์˜ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์˜ค์ง 255 ๋˜๋Š” 0์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณ ๋Œ€๋น„ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ์ด๋‹ค. ๊ทธ๋ƒฅ ํŽธํ•˜๊ฒŒ 255์™€ 0์˜ ์ค‘๊ฐ„๊ฐ’์ธ 127.5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋งŒ์•ฝ ์‚ฌ์ง„ ์ž์ฒด๊ฐ€ ๋ฐ์•„์„œ ๋ชจ๋‘ 128๋ณด๋‹ค ํฐ ๋ช…๋„๊ฐ’์„ ๊ฐ–๋Š”๋‹ค๋ฉด ์ „์ฒด๊ฐ€ ํ•˜์–€์ƒ‰์œผ๋กœ ๋  ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ, ํžˆ์Šคํ† ๊ทธ๋žจ์„ ํ™œ์šฉํ•ด์„œ ์ „์ฒด ์ด๋ฏธ์ง€์˜ ๋ช…๋„ ๋ถ„ํฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ์ค€๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋” ์•ˆ์ „ํ•˜๊ณ  ๊ณ ๋ฅด๊ฒŒ ๊ณ ๋Œ€๋น„ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

//127.5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๋Œ€๋น„ ์ฒ˜๋ฆฌ

                            if (inImage[i][k] > (0 + 255)/2) {
                                outImage[i][k] =  255;
                            } else {
                                outImage[i][k] = 0;
                            }
                            
//ํžˆ์Šคํ† ๊ทธ๋žจ ํ‰๊ท ์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๋Œ€๋น„ ์ฒ˜๋ฆฌ
                avgValue = hapValue / (inH*inW);

                for(var i=0; i<inH; i++) {
                    for (var k=0; k<inW; k++) {
                        if (inImage[i][k] <= avgValue)
                            outImage[i][k] = 0;
                        else
                            outImage[i][k] = 255;
                        }
                    }
                        
//ํžˆ์Šคํ† ๊ทธ๋žจ ์ค‘๊ฐ„๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๋Œ€๋น„ ์ฒ˜๋ฆฌ
                oneAry.sort();
                centerValue = oneAry[parseInt((inH*inW)/2)];

                for(var i=0; i<inH; i++) {
                    for (var k=0; k<inW; k++) {
                        if (inImage[i][k] <= centerValue)
                            outImage[i][k] = 0;
                        else
                            outImage[i][k] = 255;
                    }

 

์ข€ ๋” ์‹ฌํ™” ์ด๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ€์ž๋ฉด, ์™ผ์ชฝ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๋ช…์•” ๋ถ„ํฌ๋ฅผ ๋Š˜๋ฆผ์œผ๋กœ์จ ๋‚ฎ์€ ๋ช…์•”๋Œ€๋น„๋ฅผ ๋ณด์ด๋Š” ์˜์ƒ์˜ ํ™”์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ช…์•”๋Œ€๋น„ ์ŠคํŠธ๋ ˆ์นญ์˜ ๊ณต์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋‹ค๋งŒ ์ด ๋ฐฉ๋ฒ•์€ 0๊ณผ 255์˜ ๊ฐ’์ด ๊ฐ๊ฐ ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด, ์ŠคํŠธ๋ ˆ์นญํ•  ๊ณต๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํšจ๊ณผ๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿผ์—๋„ ์ข€ ๋” ์„ ๋ช…ํ•œ ๋ช…๋„๋Œ€๋น„๋ฅผ ์›ํ•œ๋‹ค๋ฉด, high๊ฐ’์„ ๊ฐ•์ œ๋กœ ๋‚ฎ์ถ”๊ณ  low ๊ฐ’์„ ๊ฐ•์ œ๋กœ ๋†’ํ˜€์„œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค๊ณ  ์ŠคํŠธ๋ ˆ์นญ์„ ํ•˜๋ฉด ๋”์šฑ ์„ ๋ช…ํ•œ ๋ช…๋„ ๋Œ€๋น„๋ฅผ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์ด ๋ฐ”๋กœ ์—”๋“œ-์ธ ํƒ์ƒ‰์ด๋‹ค. ์—”๋“œ-์ธ ํƒ์ƒ‰์€ ์ผ์ • ์–‘์˜ ํ™”์†Œ๋ฅผ ํฐ์ƒ‰์ด๋‚˜ ๊ฒ€์ •์ƒ‰์œผ๋กœ ์ง€์ •ํ•ด์„œ ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๋ถ„ํฌ๋ฅผ ์ข€ ๋” ๊ท ์ผํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ high, low๊ฐ’์€ ์–ด๋Š์ •๋„ ์ด์ƒ์„ ํฐ์ƒ‰/๊ฒ€์€์ƒ‰์œผ๋กœ ์ง€์ •ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋œปํ•œ๋‹ค.

๋‹ค๋งŒ, ์—”๋“œ์ธ์€ ๋ช…๋„๊ฐ€ ํ•œ ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ง„ (๋„ˆ๋ฌด ์–ด๋‘ก๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๋ฐ์€) ์ด๋ฏธ์ง€๋Š” ์ ์šฉํ•˜๊ธฐ ์œ„ํ—˜ํ•˜๋‹ค. ๋งจ ๋ 50์”ฉ์„ ์ž˜๋ผ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  ๋งŒ์•ฝ ์–ด๋‘์šด ์‚ฌ์ง„์˜ ๋ช…๋„๋Œ€๋น„๋ฅผ ๋šœ๋ ทํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํ‰ํ™œํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ์ ํ•ฉํ•˜๋‹ค. ํ‰ํ™œํ™”๋Š” ์˜์ƒ์˜ ๋ฐ๊ธฐ ๋ถ„ํฌ๋ฅผ ์žฌ๋ถ„๋ฐฐํ•˜์—ฌ ๋ช…์•”๋Œ€๋น„๋ฅผ ์ตœ๋Œ€๋กœ ๋†’์ด๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ช…์•”์˜ ๋นˆ๋„๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์„œ ์–ด๋‘์šด ์‚ฌ์ง„์—๋Š” ์ •๋ง ํšจ๊ณผ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

3) ๊ธฐํ•˜ํ•™์  ๋ณ€ํ™˜

๊ธฐํ•˜ํ•™์  ๋ณ€ํ™˜์€ ํ™”์†Œ์˜ ๊ณต๊ฐ„์  ์œ„์น˜๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋ช…๋„๊ฐ’์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์œ„์น˜๋งŒ ๋ณ€ํ•œ๋‹ค. ์ œ์ผ ๋‹จ์ˆœํ•œ ๊ฒƒ์€ ์ขŒ์šฐ๋ฐ˜์ „๊ณผ ์ƒํ•˜๋ฐ˜์ „์ด๋‹ค. ์ƒ๊ฐํ•˜๊ธฐ๋„ ์‰ฝ๊ณ  ์ฝ”๋“œ๋„ ๋‹จ์ˆœํ•˜๋‹ค.

//์ƒํ•˜๋ฐ˜์ „
outImage[i][k] = inImage[outH - i - 1][k];

//์ขŒ์šฐ๋ฐ˜์ „
outImage[i][k] = inImage[i][outW - k -1];

์ด๋ฏธ์ง€๋ฅผ ํšŒ์ „์‹œํ‚ค๋Š” ๊ฒƒ๋„ ํ”ฝ์…€์˜ ์œ„์น˜๋งŒ ๋ณ€ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ ํšŒ์ „ํ•˜๋ ค๋Š” ์˜์ƒ์˜ ์ค‘์‹ฌ์ ๋„ ๊ณ ๋ คํ•ด์„œ ์ˆ˜ํ•™์  ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํšŒ์ „์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋„ ๋” ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋„ ๋ฐ›๋Š” value๊ฐ’์— ๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ ์„ค์ •ํ•ด๋‘์—ˆ๋‹ค.

์ถœ๋ ฅ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ

์ด๋ฏธ์ง€๋ฅผ ํ™•๋Œ€/์ถ•์†Œ ์‹œํ‚ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊ฐ™์€ ํ”ฝ์…€์„ ๋Š˜๋ฆฌ๊ณ  ์ค„์ด๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋” ์ž˜ ์ถ•์†Œํ•˜๊ณ  ํ™•๋Œ€ํ•˜๋ ค๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋” ๋ณต์žกํ•ด์ง„๋‹ค.

์ด๋ฏธ์ง€ ์ถ•์†Œ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ 4๊ฐœ์˜ ๋ช…๋„๊ฐ’ ์ค‘ ์ž„์˜๋กœ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 1/2๋กœ ์ค„์ผ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ถ•์†Œ์‹œ ๊ฒฝ๊ณ„๊ฐ€ ๊นจ์ ธ์„œ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‚˜๋Š” ๋” ๋‚˜์€ ํ™”์งˆ์„ ์œ„ํ•ด 4๊ฐœ์˜ ํ‰๊ท ์„ ์ถœ๋ ฅ ํ”ฝ์…€๊ฐ’์œผ๋กœ ๋ฐ›๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ถ•์†Œ๋Š” ๋ฐฐ์—ด์˜ ํ–‰๋ ฌ ํฌ๊ธฐ๋ฅผ 1/2๋ฐฐ๋กœ ์ค„์—ฌ์•ผ ํ•˜๋ฏ€๋กœ,  ์ถœ๋ ฅ ์ด๋ฏธ์ง€์˜ ๋ฐฐ์—ด๋„ 1/2๋ฐฐ์ธ ํฌ๊ธฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. (ํ™€์ˆ˜๋ผ๋ฉด ๊ทธ๋ƒฅ ์ œ์ผ ๋์˜ ํ–‰๋ ฌ์„ ์ œ๊ฑฐํ•˜์˜€๋‹ค) ๋˜ํ•œ, ์ถ•์†Œ๋  ๋•Œ 2x2 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์ด 1x1ํฌ๊ธฐ๋กœ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ค ๊ฐœ์˜ value๊ฐ’์˜ ํ‰๊ท ์„ ๋‚ด์–ด ์ƒˆ๋กœ์šด ํ•˜๋‚˜์˜ value๋ฅผ ์ง€์ •ํ•˜์˜€๋‹ค.

//ํ™”์งˆ ๊ฐœ์„ ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ถ•์†Œ
outImage[parseInt(i*scale)][parseInt(k*scale)] = inImage[i][k];

//ํ™”์งˆ ๊ฐœ์„ ์„ ๊ณ ๋ คํ•œ ์ถ•์†Œ
outImage[i][k] = (inImage[i*2+1][k*2+1] +inImage[i*2+1][k*2]+inImage[i*2][k*2+1]+inImage[i*2][k*2])/4;

์™ผ) ํ™”์งˆ ๊ฐœ์„ ์ด ๊ณ ๋ ค๋˜์ง€ ์•Š์€ ์ถ•์†Œ, ์˜ค) ํ™”์งˆ ๊ฐœ์„ ์ด ๊ณ ๋ ค๋œ ์ถ•์†Œ

2๋ฐฐ ํ™•๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ํ™”์งˆ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์ธ์ ‘ํ•œ 4๊ฐœ์˜ ํ”ฝ์…€์„ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ”ฝ์…€ ํ˜•ํƒœ๊ฐ€ 2๋ฐฐ๋กœ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๊ณ„๋ฉด์ด ๋งค๋„๋Ÿฝ์ง€ ๋ชปํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ ์•ˆํ•œ ๋ฐฉ๋ฒ•์€ ์›์‹œ ํ™”์†Œ์˜ ๊ฐ’์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ œ์ผ ๋†’๊ฒŒ ์žก์€ ์ƒํƒœ์—์„œ ์ฃผ๋ณ€ ํ™”์†Œ๋“ค์˜ ๊ฐ’์„ ๊ณ ๋ คํ•˜์—ฌ ์ถœ๋ ฅ ํ”ฝ์…€๊ฐ’์„ ๋ฐ›๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 2๋ฐฐ ํ™•๋Œ€์˜ ํ™”์งˆ๊ฐœ์„ ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ‘์˜ ๋งํฌ์— ์ž์„ธํ•˜๊ฒŒ ์ ํ˜€์žˆ๊ณ , ์—ฌ๊ธฐ์—๋Š” ๊ณต์‹๊ณผ ๊ฒฐ๊ณผ๋งŒ์„ ์ฒจ๋ถ€ํ•˜๊ฒ ๋‹ค.

//ํ™”์งˆ ๊ฐœ์„ ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ 2๋ฐฐ ํ™•๋Œ€
outImage[i][k] = inImage[parseInt(i/2)][parseInt(k/2)];

2๋ฐฐ ํ™•๋Œ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™”์งˆ ๊ฐœ์„ ํ•˜๊ธฐ: https://hanav.tistory.com/140

4) ํ™”์†Œ ์˜์—ญ ์ฒ˜๋ฆฌ

ํ™”์†Œ ์˜์—ญ ์ฒ˜๋ฆฌ๋Š” ์ฃผ๋ณ€ ํ™”์†Œ์˜ ๊ฐ’๋„ ๊ฐ™์ด ๊ณ ๋ คํ•˜๋Š” ๊ณต๊ฐ„ ์˜์—ญ์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ๋ณ€ ํ”ฝ์…€์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ์ด ๋•Œ ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณฑํ•  ๋•Œ๋Š” ๋งˆ์Šคํฌ์˜ ํฌ๊ธฐ-1๋งŒํผ ๋” ํฐ ์ž„์‹œ ์ž…๋ ฅ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋” ๋†’์€ ์™„์„ฑ๋„๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ž„์‹œ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ์ž๋ฆฌ ๊ฐ’๋„ ๋น„์Šทํ•˜๊ฒŒ ์„ค์ •ํ•ด์ฃผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, ์ผ๋‹จ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋นˆ ๊ณต๊ฐ„์€ 127๋กœ ์ฑ„์›Œ์„œ ๊ณ„์‚ฐํ•˜์˜€๋‹ค. ๋งŒ๋“ค์–ด์ง„ ์ž„์‹œ ์ž…๋ ฅ ๋ฐฐ์—ด์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๊ณ , ๊ฐ€์ค‘์น˜ ๊ณ„์‚ฐ์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

ํ™”์†Œ ์˜์—ญ ์ฒ˜๋ฆฌ๋Š” ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๋Š” ๋‹ค ๊ฐ™๊ณ , ์ฃผ๋ณ€ ํ™”์†Œ์™€ ์›์‹œ ํ™”์†Œ๊ฐ„์˜ ๊ฐ€์ค‘์น˜์— ๋”ฐ๋ผ ํšจ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜จ๋‹ค. ๊ฐ ํšจ๊ณผ์˜ ์ž์„ธํ•œ ์ฝ”๋“œ์™€ ์„ค๋ช…์€ ๋ฐ‘์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

https://hanav.tistory.com/138

 

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): ๋งˆ์Šคํฌ ์‚ฌ์šฉํ•ด์„œ ์— ๋ณด์‹ฑ, ๋ธ”๋Ÿฌ, ๊ฐ€์šฐ์‹œ์•ˆ ๋ธ”๋Ÿฌ,

ํ™”์†Œ ์˜์—ญ ์ฒ˜๋ฆฌ๋ž€, ํ”ฝ์…€์ด ์ฃผ๋ณ€์˜ ํ”ฝ์…€๊ฐ’์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ๋ณ€ ํ”ฝ์…€์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ์ด ๋–„ ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งˆ์Šคํฌ๋กœ ๊ฐ€์ค‘์น˜

hanav.tistory.com

๋” ๋‚˜์•„๊ฐ€, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ธ”๋Ÿฌ ํšจ๊ณผ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์งœ๋ณด์•˜๋‹ค. ๋งˆ์Šคํฌ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ธ”๋Ÿฌ ํšจ๊ณผ๋Š” ์ ์  ๋” ๊ฐ•ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋งˆ์Šคํฌ์˜ ํฌ๊ธฐ๋ฅผ value๋ผ ๋‘๊ณ  ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›์•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋ณ€ํ–‰๋ ฌ์„ ์ฝ”๋“œ๋กœ ์งœ๊ธฐ์—๋Š” ์–ด๋ ค์›Œ๋ณด์˜€๊ณ , ๋‹จ์ˆœ ํ‰๊ท  ๊ณ„์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ต์ง€ ์•Š๊ฒŒ ์ด์ค‘ for๋ฌธ ์•ˆ์— ๋˜ ์ด์ค‘ for๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋Š” ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์ด๋•Œ๋„ ์ž„์‹œ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๋นˆ ๊ณต๊ฐ„์€ 127.0์œผ๋กœ ์ฑ„์›Œ์ฃผ์—ˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ์ฝ”๋“œ๋Š” ๋ฐ‘์˜ ๋งํฌ์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

https://hanav.tistory.com/142

 

JavaScript๋กœ ์˜์ƒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๊ธฐ (Beta ver.): ๋ธ”๋Ÿฌ ํšจ๊ณผ ์กฐ์ ˆํ•˜๊ธฐ + ๊ฒฝ๊ณ„๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋งˆ์Šคํฌ์˜ ํฌ๊ธฐ๋ฅผ value by value๋กœ ๊ฐ€๋ณ€ํ–‰๋ ฌ๋กœ ๋ฐ›์•„์„œ value๊ฐ’์— ๋”ฐ๋ผ ๋ณ€ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๊ฐ€์šฐ์‹œ์•ˆ ๋ธ”๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ๋ธ”๋Ÿฌ๋กœ ํ•œ๋‹ค๋ฉด ๋งˆ์Šคํฌ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 1. value๊ฐ€ 1

hanav.tistory.com

 

Step4: UI ๊ฐœ์„ ํ•˜๊ธฐ

๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค ๊ตฌํ˜„์ด ๋˜์—ˆ์œผ๋ฉด UI๋„ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์ˆ˜์ •์„ ํ•˜์˜€๋‹ค.
๋จผ์ € select option ํƒœ๊ทธ๋Š” ํŽธ์˜์„ฑ๋„ ๊ทธ๋ ‡๊ณ  ๋””์ž์ธ์ ์œผ๋กœ ๋งŽ์ด ๋ณ„๋กœ๋ผ๊ณ  ๋Š๊ปด์ ธ์„œ list์™€ submenu๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ์ˆ˜์ •ํ•˜์˜€๋‹ค.

๋˜ํ•œ, ํšจ๊ณผ๋ฅผ ์ค‘๋ณต ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์–ด ํ˜„์žฌ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฒ„ํŠผ๊ณผ ์—ฐ๋™์‹œ์ผฐ๋‹ค. ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ถœ๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์•Œ๋žŒ์ฐฝ์ด ๋œจ๋„๋ก ์„ค์ •ํ•˜์˜€๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์•Œ๋žŒ์ฐฝ์ด ๋– ์„œ ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
-ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ ์šฉ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ
-์›ํ•˜๋Š” ๊ฐ๋„๋กœ ํšŒ์ „ ํšจ๊ณผ์— 0~360 ์‚ฌ์ด์˜ ๊ฐ’์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ
-์ฒซ ์ด๋ฏธ์ง€๋ณด๋‹ค ๋” ํฐ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“œ๋Š” ํšจ๊ณผ๋ฅผ ์ ์šฉ์‹œํ‚ฌ ๋•Œ

 

 

728x90

"); wcs_do();