OpenCV์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ Mat ํด๋์ค
C++์์ ์์ํ๋ OpenCV์ ์ด์ด์, ์ค๋์ OpenCV์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ํด๋์ค๋ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
OpenCV๋ ์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์์ ์์์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ค์ ๋ก ํฌํ ์ต ๋ฑ์์ ์ฌ์ฉํ๋ GRAYSCALEํจ๊ณผ ๋ฑ์ ์ด๋ฐ OpenCV์ ๋งค์ฐ ํก์ฌํ๋ฉฐ ์ด๋ฅผ ์ฐ๋ฆฌ๊ฐ ๋ฌด๋ฃ๋ก ์ง์ ํ๋ก๊ทธ๋๋ฐํ ์ ์๋๋ก ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฐ๋ก OpenCV์๋ค๋ ๊ฒ์ ์ง๋ ํฌ์คํธ์์ ์ ์ ์์์ต๋๋ค.
Image Processing
์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๊น์? ๊ทธ ์ ์ ์ปดํจํฐ์์๋ ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง๋ถํฐ ํ ๋ฒ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์์ ์ด๋ค ํ ์ฌ์ง์ด ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ๋ ๊ทธ๋ฅ ๊ทธ์ ์ด๋ฏธ์ง์ผ ๋ฟ์ด์ง๋ง, ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋์งํธํ๋ ์ด๋ฏธ์ง๋ผ๊ณ ํํํฉ๋๋ค. ๋์งํธํ๋ ์ด๋ฏธ์ง๋, Pixel์ด๋ผ ๋ถ๋ฅด๋ ์ ๋ค์ด ๋ชจ์ฌ์ ํ์์ ๋ง๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ค์ ์ด๋ฏธ์ง๋ ์ด ์ ๋ค์ ๋ชจ์์ผ๋ก ์ปดํจํฐ๋ ์ด ์ ๋ค์ ๊ฐ๋ค์ ํตํด ์ด๋ฏธ์ง์ ๋ชจ์ต์ ๋ฐ๊พธ์ด ํ์ํ๋ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ํํ์ ํ ์ ์์ต๋๋ค.
์ฝ๊ฒ ์์๋ฅผ ํ ๋ฒ ๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋์งํธํ๋ ์ด๋ฏธ์ง๋ฅผ ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌํ ๋๋ ์์ ๊ฐ์ด ์ฒ๋ฆฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฃผ ํ๋ คํ๊ณ ๋ฉ์ง ์ฌ์ง์ด ๋ณด์ด์ง๋ง, ์ปดํจํฐ๋ ์ด๋ ๊ฒ ์ซ์๋ก ๋ ๊ฒ์ ํ๋ฉด์ ๋์ฐ๋ ๊ฒ ๋ฟ์ ๋๋ค. ์ ํ๋ฉด์ ๋์จ ์ซ์๋ 10 x 10 pixel ํฌ๊ธฐ์ ์์์ ์ด๋ฏธ์ง๋ก ์ฐ๋ฆฌ๋ ์ด ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Matrix(ํ๋ ฌ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ Matrix๋ ๊ทธ ์์ ์๋ Matrix์ ํก์ฌํ์ง๋ง ๋ญ๊ฐ ๋ค๋ฆ
๋๋ค. ์ ์ ๊ฐฏ์๊ฐ 10์นธ์ด ์๋์ฃ ? ํ์ง๋ง ์ Matrix๋ 10 x 10 Pixel์ ์ด๋ฏธ์ง์
๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ ๊ฐ๋ก 30๊ฐ, ์ธ๋ก๊ฐ 30๊ฐ์ธ ๊ฑธ๊น์?
์ด๋ฏธ์ง์๋ ์ฑ๋์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํฉ๋๋ค. ์ฑ๋์ ์ฝ๊ฒ ๋งํ๋ฉด ์ด ์ด๋ฏธ์ง๊ฐ 1์ฑ๋ ์ด๋ฏธ์ง์ธ์ง, 3์ฑ๋ ์ด๋ฏธ์ง์ธ์ง ๋งํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ์ด๋ค ์ฐจ์ด๋๊ตฌ์? ์ฌ๋ฌ๋ถ๋ค์ด ์ ์๊ณ ์๋ RGB์ ์ฑ๋์ ๋๋ค. 1์ฑ๋์ด๋ฉด ํ๊ณผ ๋ฐฑ, ์ฆ ํ๋ฐฑ ์ด๋ฏธ์ง์ฒ๋ฆฌ์ธ ๊ฒ์ด๊ณ , 3์ฑ๋์ด๋ฉด RGB ํน์ RGBA๊น์งํด์ ์ด ๋นจ๊ฐ, ์ด๋ก, ํ๋์์ผ๋ก ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
์ฆ, ๋๊ฒ์ 10 x 10 ํฝ์ ์ ์ด๋ฏธ์ง์ด์ง๋ง ๊ฐ๋ก 10์นธ, ์ธ๋ก 10์นธ์ ํ๋ ฌ์ 1์ฑ๋ ์ด๋ฏธ์ง(ํ๋ฐฑ),
๊ทธ ์๋์ ์๋ ๊ฒ์ 3์ฑ๋ ์ด๋ฏธ์ง(์ปฌ๋ฌ)์ธ ๊ฒ์ ๋๋ค.
OpenCV ๊ธฐ๋ณธ ํด๋์ค
์ ์ด์ ์ปดํจํฐ๊ฐ ์ด๋ป๊ฒ ๋์งํธํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๋์ง์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ค๋ช ์ด ์ถฉ๋ถํ ๋์ด์ก์ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ , ์ด์ ์ค์ ์ฝ๋ฉ์ ๋ค์ด๊ฐ๊ธฐ ์ํด OpenCV์์ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ํด๋์ค ํํธ๋ ํฌ์คํธ๋ฅผ ๋์ ๊ฑฐ๋ฆด(?) ๋๋ง๋ค ๋งค๋ฒ ์ค๋ช ํ ๊ฒ์ ๋๋ค. OpenCV์์ ์ฌ์ฉํ๋ ํด๋์ค๊ฐ ํ ๋๊ฐ์ง๊ฐ ์๋ ๊ฒ๋ ์๋๊ณ , ์ฌ์ด ์ค๋ช ์ ์ํด์ ๊ฐ๊ฐ์ ์ฌ์ฉ๋ฒ๊ณผ ์ด๋จ ๋ ์ฌ์ฉ์ ํ๋ฉด ์ข์์ง์ ๋ํ ์์ง๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ค๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋จํ ๋์งํธํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ํด๋์ค์ธ Mat ํด๋์ค์ ๋ํด์๋ง ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
Mat ํด๋์ค
Mat ํด๋์ค๋ C++ STL์์ ๊ฐ์ฅ ๋ง์ ๋ถ๋ถ์ ์ฐจ์งํ๊ณ ์๋ ํด๋์ค์ ๋๋ค. ์๊น ์์์ ๋ดค๋ ์ซ์๋ก ๋ ๋์งํธํ๋ ๋ฐฐ์ด๋ค์ ๋ชจ๋ Mat ํด๋์ค๋ก ๊ตฌํํ ํ๋ ฌ์ ๋๋ค. ์ด Mat ํด๋์ค๋ก๋ 1์ฑ๋ ๋๋ ๋ค์ฑ๋์ ์์, ๋ณต์์, ํ๋ ฌ, ์์ ๋ฑ์ ์์น ๋ฐ์ดํฐ๋ฅผ ํํํ๋ n ์ฐจ์ ํ๋ ฌ ํด๋์ค์ ๋๋ค.
์ค์ ๋ก OpenCV 2.4 ๋ฒ์ ์์๋ C++ STL์์ ์ ์์ ์ผ๋ก ์ ๊ณตํ๋ Mat ๋์ CvMat์ด๋ผ๊ณ ํ๋ C ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ ๊ฒ์ด ์์ต๋๋ค. ๋ฌผ๋ก 3.x ๋ฒ์ ์์ ์ด๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฒ์ ์๋์ง๋ง 3.x ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด C++์ ๊ธฐ๋ณธ API ์ฌ์ฉ์ ์ถ์ฒํฉ๋๋ค.
๋, ๊ธฐ์กด์ CvMat์ ์ฌ์ฉํด ๊ตฌํํ ์ด๋ฏธ์ง๋ฅผ ์ํด OpenCV 3.x ๋ฒ์ ์์๋ cvarrToMat์ด๋ผ๋ ํจ์๋ฅผ ํตํด CvMat์ด๋ IplImage ๋ฑ์ Mat์ผ๋ก ๋ณํ์์ผ์ฃผ๋ ๋งค์ฐ ์ข์ ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฐจํ ํฌ์คํธ์์ ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ๋ ์์ธํ ๋ฐฉ๋ฒ์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค.
๊ทธ๋ผ ์ด์ Mat ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ์๋ค.
Mat ํด๋์ค๋ฅผ ์ด์ฉํด ๋ณ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์๋ฌด๋ฐ ์์ฑ์ ์๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ด์ฉํด ์์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ฑฐ๊ธฐ์ create๋ผ๋ ํด๋์ค ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ํด์ง ํฌ๊ธฐ์ ์๋ฃํ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
์์๋ฅผ ์ฝ์ ํ ๋๋ at์ด๋ผ๋ ํด๋์ค ํจ์๋ฅผ ์ฌ์ฉํด ์์๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
์ด ์ธ์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก๋ Mat ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ๋ณ์๋ฅผ ํตํด์ ์ฝ์ ํ ์๋ ์๊ณ , Scalar ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์์ ์ฝ์ ์ ๋ํ ์์ธํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ฐจํ ํฌ์คํธ๋ฅผ ํตํด์ ๋ ์์๋ณผ ๊ฒ์ ๋๋ค.
๋ค๋ง Mat ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋๋ ๋ช ๊ฐ์ง ์ฃผ์ํด์ผํ ์ฌํญ์ด ์์ต๋๋ค.
์ ์ฝ๋๋ Mat ํด๋์ค๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด๋ก data๋ฅผ ์ฃผ์ด์ค ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์์ ๋ฌธ์ ์ ์ ์์์ ๊ฐฏ์๋ 9๊ฐ์ธ๋ฐ, 10 x 10 ํฌ๊ธฐ์ Matrix๋ฅผ ์์ฑํ๋ค๋ ์ ์ ๋๋ค. ์๋ฌด๋๋ C++ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ๋น ์์์ ๊ฐ์ 0์ด ์๋ ์ฐ๋ ๊ธฐ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ, ์ฐ์ฐ์ ์ํํ ๋ 0์ ์์๋ก ์ฐ์ฐ์ด ์ํ๋๋ ๊ฒ์ด ์๋์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๊ทธ๋ผ ๊ฐ๋จํ ์์ ๋ก ๋จ์ผ ์๊น์ ์ด๋ฏธ์ง๋ฅผ ํํํด๋ณด๊ณ , ํฌ์คํ
์ ๋ง์น๊ฒ ์ต๋๋ค.
3 Channel์ Matrix 3๊ฐ๋ฅผ ๋ง๋ค๊ณ , ๊ฐ๊ฐ ์ปฌ๋ญ๊ฐ์ ์ฝ์
ํ์ต๋๋ค. Scalar์ ๊ฒฝ์ฐ, R, G, B๊ฐ ์๋ B, G ,R ๊ฐ์ ์์ด๊ธฐ ๋๋ฌธ์ ๋นจ๊ฐ์์ ๋ฃ๊ณ ์ถ๋ค๋ฉด 0๋ฒ์งธ Scalar๊ฐ ์๋ 2๋ฒ์จฐ Scalar์ ์์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
'Programming > OpenCV' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GP] OpenCV Trackbar ์ฃผ๋ฌด๋ฅด๊ธฐ (0) | 2017.03.01 |
---|---|
OpenCV์์ KeyEvent๋ฅผ ์ฌ์ฉํด๋ณด์. (0) | 2017.01.21 |
OpenCV์์ Mouse Event๋ฅผ ์ฌ์ฉํด๋ณด์ (0) | 2016.12.18 |
Ubuntu 16.04 ์์ OpenCV 3.x ์ค์น (0) | 2016.11.06 |
C++์์ ์์ํด๋ณด๋ OpenCV (0) | 2016.10.30 |