image_opencv
image_to_ipl
ํจ์ ์ด๋ฆ: image_to_ipl
์ ๋ ฅ:
image im (์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด)
๋์:
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด๋ฅผ OpenCV์ IplImage ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
๋ณํ ๊ณผ์ ์์๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฐ ์ฑ๋์ ๋ง๊ฒ IplImage ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ ๋ค, ์ ๋ ฅ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ 0~255 ๋ฒ์๋ก ์ค์ผ์ผ๋งํ์ฌ IplImage์ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
YOLO๊ฐ์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ ํ๋ ์๋ง๋ค OpenCV์ IplImage ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ์ฌ ์ถ๋ ฅํ๊ธฐ ์ํ ํจ์์ ๋๋ค.
IplImage ๊ตฌ์กฐ์ฒด๋ OpenCV์์ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ฒด๋ก, ์ฑ๋, ํฌ๊ธฐ, ๋ฐ์ดํฐ ํ์ ๋ฑ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
์ด ํจ์์์๋ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ์ด๋ฏธ์ง ๊ตฌ์กฐ์ฒด๋ฅผ IplImage ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ์ฌ ๋ฐํํฉ๋๋ค.
ipl_to_image
ํจ์ ์ด๋ฆ: ipl_to_image
์ ๋ ฅ:
IplImage* src (IplImage ํฌ์ธํฐ)
๋์:
OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ IplImage ํฌ๋งท์ผ๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ Darknet์ image ํฌ๋งท์ผ๋ก ๋ณํํ๋ค.
์ฃผ์ด์ง IplImage ํฌ์ธํฐ๋ก๋ถํฐ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋ ์๋ฅผ ๊ฐ์ ธ์์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด image๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ IplImage์ imageData ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์๋ก ๋ง๋ image์ ๋ฐ์ดํฐ ํฌ์ธํฐ์ ํ ๋นํ๋ค.
์ค๋ช :
OpenCV์ IplImage ํฌ๋งท์ผ๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ Darknet์ image ํฌ๋งท์ผ๋ก ๋ณํํ๋ ํจ์์ด๋ค.
์ฃผ์ด์ง IplImage ํฌ์ธํฐ๋ก๋ถํฐ ์ด๋ฏธ์ง์ ๋์ด, ๋๋น, ์ฑ๋ ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ์ ธ์จ ๋์ด, ๋๋น, ์ฑ๋ ์๋ฅผ ์ด์ฉํ์ฌ make_image ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋ก์ด image๋ฅผ ๋ง๋ ๋ค.
์ดํ, IplImage์ imageData ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์๋ก ๋ง๋ image์ ๋ฐ์ดํฐ ํฌ์ธํฐ์ ํ ๋นํ๋ค.
์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ํฝ์ ๊ฐ ๋ฒ์๊ฐ 0
255์ด๋ฏ๋ก, 255๋ก ๋๋์ด์ 01 ๋ฒ์๋ก ์ ๊ทํํ๋ค. ๋ฐํ๊ฐ: ๋ณํ๋ image ๊ตฌ์กฐ์ฒด
image_to_mat
ํจ์ ์ด๋ฆ: image_to_mat
์ ๋ ฅ:
image im (์ ๋ ฅ ์ด๋ฏธ์ง)
๋์:
์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ OpenCV์ Mat ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
๋จผ์ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ฌํ๊ณ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ ํ, ์ ๋ ฅ ์ด๋ฏธ์ง๊ฐ 3์ฑ๋(RGB)์ธ ๊ฒฝ์ฐ rgbgr ๋ณํ์ ์ํํฉ๋๋ค.
๊ทธ ํ, ๋ณํ๋ ์ด๋ฏธ์ง๋ฅผ IplImage ํ์์ผ๋ก ๋ณํํ๊ณ cvarrToMat ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Mat ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก IplImage ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ์ด๋ฏธ์ง ๋ณต์ฌ๋ณธ์ ํด์ ํฉ๋๋ค.
์ค๋ช :
copy_image(im): ์ ๋ ฅ ์ด๋ฏธ์ง์ ๋ณต์ฌ๋ณธ์ ์์ฑํฉ๋๋ค.
constrain_image(copy): ์ด๋ฏธ์ง๋ฅผ 0~1 ๊ฐ์ผ๋ก ์ ํํฉ๋๋ค.
rgbgr_image(copy): ์ด๋ฏธ์ง ์์ ์ฑ๋์ RGB์์ BGR ์์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
image_to_ipl(copy): ์ด๋ฏธ์ง๋ฅผ IplImage ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
cvarrToMat(ipl, true): IplImage๋ฅผ Mat ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
cvReleaseImage(&ipl): IplImage ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
free_image(copy): ์ด๋ฏธ์ง ๋ณต์ฌ๋ณธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํฉ๋๋ค.
mat_to_image
ํจ์ ์ด๋ฆ: mat_to_image
์ ๋ ฅ:
Mat m (OpenCV์์ ์ ๊ณตํ๋ ์ด๋ฏธ์ง ํฌ๋งท Mat ํ์์ ์ด๋ฏธ์ง)
๋์:
OpenCV์ Mat ํ์์ ์ด๋ฏธ์ง๋ฅผ Darknet์ image ํ์์ผ๋ก ๋ณํํ๋ ํจ์์ ๋๋ค.
๋จผ์ , Mat ํ์์ ์ด๋ฏธ์ง๋ฅผ IplImage ํ์์ผ๋ก ๋ณํํ ํ ipl_to_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Darknet์ image ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
์ดํ, rgbgr_image ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ์์์ ๋ณํํฉ๋๋ค.
์ค๋ช :
์ ๋ ฅ์ผ๋ก ๋ฐ์ Mat ํ์์ ์ด๋ฏธ์ง๋ฅผ Darknet์ image ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ ํจ์์ ๋๋ค.
open_video_stream
ํจ์ ์ด๋ฆ: open_video_stream
์ ๋ ฅ:
const char *f: ๋น๋์ค ํ์ผ์ ๊ฒฝ๋ก (๋น๋์ค ์คํธ๋ฆผ์ด ์๋ ๊ฒฝ์ฐ 0์ผ๋ก ์ค์ )
int c: ๋น๋์ค ์บก์ฒ ์ฅ์น์ ์ธ๋ฑ์ค (๋น๋์ค ํ์ผ์ด ์๋ ๊ฒฝ์ฐ 0์ผ๋ก ์ค์ )
int w: ๋น๋์ค ํ๋ ์์ ๋๋น (์ค์ ํ์ง ์์ ๊ฒฝ์ฐ 0)
int h: ๋น๋์ค ํ๋ ์์ ๋์ด (์ค์ ํ์ง ์์ ๊ฒฝ์ฐ 0)
int fps: ๋น๋์ค์ ์ด๋น ํ๋ ์ ์ (์ค์ ํ์ง ์์ ๊ฒฝ์ฐ 0)
๋์:
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋น๋์ค ํ์ผ ๋๋ ์บก์ฒ ์ฅ์น์์ ๋น๋์ค ์คํธ๋ฆผ์ ์ด๊ณ , ๋น๋์ค ์คํธ๋ฆผ์ ์บก์ฒํ๋ ๋ฐ ์ฌ์ฉ๋๋ VideoCapture ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
VideoCapture ๊ฐ์ฒด๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฆฌ์ง ์์ ๊ฒฝ์ฐ 0์ ๋ฐํํ๋ค.
๋๋น, ๋์ด ๋ฐ FPS ๊ฐ์ด ์ค์ ๋์๋ค๋ฉด, ํด๋น ๊ฐ์ VideoCapture ๊ฐ์ฒด์ ์ค์ ํ๋ค.
VideoCapture ๊ฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
์ ๋ ฅ๋ ๋น๋์ค ํ์ผ ๊ฒฝ๋ก๋ ์นด๋ฉ๋ผ ์ฅ์น ๋ฒํธ์ ํด๋นํ๋ ๋น๋์ค ์คํธ๋ฆผ์ ์ด๊ณ , ํ๋ ์์ ๋๋น, ๋์ด, ์๋๋ฅผ ์ค์ ํ๋ค.
์ด๋, ํ๋ ์ ๋๋น์ ๋์ด, ์๋๊ฐ 0์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋๋ค. ๋ฐํ๋๋ VideoCapture ๊ฐ์ฒด๋ ์ดํ ๋น๋์ค ํ๋ ์์ ์ฝ์ด์ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
get_image_from_stream
ํจ์ ์ด๋ฆ: get_image_from_stream
์ ๋ ฅ:
void ํฌ์ธํฐ p (์์ ์คํธ๋ฆผ ๊ฐ์ฒด)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์์ ์คํธ๋ฆผ ๊ฐ์ฒด์์ ํ์ฌ ํ๋ ์์ ์ฝ์ด์ OpenCV์ Mat ํ์์ผ๋ก ์ ์ฅํ๊ณ , ์ด๋ฅผ Darknet์ image ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค.
๋ง์ฝ ํ์ฌ ํ๋ ์์ด ์๋ ๊ฒฝ์ฐ, ํฌ๊ธฐ๊ฐ 0์ธ ๋น image๋ฅผ ๋ฐํํ๋ค.
์ค๋ช :
VideoCapture: OpenCV์์ ์์ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค
Mat: OpenCV์์ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค
make_empty_image(w,h,c): Darknet์์ ๋น image๋ฅผ ์์ฑํ๋ ํจ์ (๋๋น w, ๋์ด h, ์ฑ๋ ์ c)
mat_to_image(m): OpenCV์ Mat ํ์์ ์ด๋ฏธ์ง๋ฅผ Darknet์ image ํ์์ผ๋ก ๋ณํํ๋ ํจ์
load_image_cv
ํจ์ ์ด๋ฆ: load_image_cv
์ ๋ ฅ:
filename (char *) : ์ด๋ฏธ์ง ํ์ผ ์ด๋ฆ
channels (int) : ์ฑ๋ ์ (0, 1, 3 ์ค ํ๋)
๋์:
OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ํ๊ณ , ์ฑ๋ ์๋ฅผ ์ง์ ํ ์ ์์.
์ด๋ฏธ์ง๋ฅผ Mat ํ์์ผ๋ก ์ฝ์ ๋ค์, mat_to_image() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ image ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํจ.
์ค๋ช :
OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํ์ผ์ ์ฝ์ด์ด
channels ๊ฐ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ grayscale ๋๋ color ์ด๋ฏธ์ง๋ก ์ฝ์ด์ด (channels=0์ธ ๊ฒฝ์ฐ grayscale, channels=1์ธ ๊ฒฝ์ฐ color, channels=3์ธ ๊ฒฝ์ฐ RGB ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด์ด)
์ด๋ฏธ์ง ํ์ผ์ด ์์ ๊ฒฝ์ฐ, ์ฝ์์ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ํฌ๊ธฐ๊ฐ 10x10์ด๊ณ ์ฑ๋ ์๊ฐ 3์ธ ๋น ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ฌ ๋ฐํํจ.
mat_to_image() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Mat ํ์์ ์ด๋ฏธ์ง๋ฅผ image ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐํํจ.
show_image_cv
ํจ์ ์ด๋ฆ: show_image_cv
์ ๋ ฅ:
image im (ํ์ํ ์ด๋ฏธ์ง)
const char* name (์๋์ฐ ์ฐฝ ์ด๋ฆ)
int ms (์๋์ฐ๊ฐ ์ด๋ฆฐ ์ํ๋ก ์ ์งํ ์๊ฐ)
๋์:
์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง๋ฅผ OpenCV Mat ํ์์ผ๋ก ๋ณํํ๊ณ , ํด๋น ์ด๋ฏธ์ง๋ฅผ ์๋์ฐ ์ฐฝ์ ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ฐ๊ฐ ์ด๋ฆฐ ์ํ๋ก ms (์ ๋ ฅ์ผ๋ก ๋ฐ์ ์๊ฐ) ๋ฐ๋ฆฌ์ด๋งํผ ๋๊ธฐํ ํ, ํค๋ณด๋ ์ ๋ ฅ์ด ์์ผ๋ฉด ํด๋น ์ ๋ ฅ์ ์์คํค ์ฝ๋ ๊ฐ์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
์ค๋ช :
Darknet์์ ํ์ํ ์ด๋ฏธ์ง๋ฅผ OpenCV์ imshow ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐ ์ฐฝ์ ํ์ํ๋ ํจ์์ด๋ค.
์ด๋ฏธ์ง๋ฅผ OpenCV์ Mat ํ์์ผ๋ก ๋ณํํ์ฌ imshow ํจ์์ ์ ๋ฌํ๊ณ , ์ ๋ ฅ๋ ์๊ฐ(ms)๋งํผ ๋๊ธฐํ๋ค๊ฐ ํค๋ณด๋ ์ ๋ ฅ์ด ์์ผ๋ฉด ํด๋น ์ ๋ ฅ์ ์์คํค ์ฝ๋ ๊ฐ์ ๋ฐํํ๋ค.
๋ฐํ๋ ๊ฐ์ด -1์ด๋ฉด ์๋ฌด ์ ๋ ฅ๋ ์์๋ค๋ ๋ป์ด๋ค.
make_window
ํจ์ ์ด๋ฆ: make_window
์ ๋ ฅ:
name (char*): ์ฐฝ์ ์ด๋ฆ
w(int): ์ฐฝ์ ๋๋น
h(int): ์ฐฝ์ ๋์ด
fullscreen(int): ์ ์ฒดํ๋ฉด ์ฌ๋ถ(0 ๋๋ 1)
๋์:
OpenCV ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ namedWindow() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ด name์ธ ์ฐฝ์ ์์ฑํ๋ค.
fullscreen์ด 1์ธ ๊ฒฝ์ฐ ์ฐฝ์ ์ ์ฒดํ๋ฉด์ผ๋ก ํ์ํ๊ณ , 0์ธ ๊ฒฝ์ฐ ์ฐฝ์ ํฌ๊ธฐ๋ฅผ w x h๋ก ์กฐ์ ํ๋ค.
Demo๋ผ๋ ์ด๋ฆ์ ์ฐฝ์ธ ๊ฒฝ์ฐ, (0,0) ์์น๋ก ์ด๋์ํจ๋ค.
์ค๋ช :
OpenCV๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฐฝ์ ๋ง๋๋ ํจ์์ด๋ค.
์ฐฝ์ ์ด๋ฆ๊ณผ ํฌ๊ธฐ, ์ ์ฒดํ๋ฉด ์ฌ๋ถ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๊ณ , namedWindow()๊ณผ setWindowProperty() ๋๋ resizeWindow()์ moveWindow() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐฝ์ ์์ฑํ๊ฑฐ๋ ํฌ๊ธฐ์ ์์น๋ฅผ ์กฐ์ ํ๋ค.
Last updated
Was this helpful?