관리 메뉴

마틴블로그닷넷

OpenCV 강좌 09. 마커에 동영상 삽입하기 본문

[ 프로그래밍 ]/강좌

OpenCV 강좌 09. 마커에 동영상 삽입하기

K. Martin 2009.07.16 18:49
예언자일보 프로젝트의 대미를 장식할 마지막 단계.
검출된 마커에 동영상을 삽입하는 방법이다.

동영상이라고 하는 것이 뭐 거창한 것 같지만 실제 형태는 스틸컷의 연결 정도로 보는 것이 적당하다. (MPEG 압축 등은 별개)
다시말해 모든 프레임을 이미지 형태로 가져올 수 있다는 말이다.

이렇게 매 프레임을 추출된 마커의 꼭지점 정보를 이용하여 변형한 뒤 원 영상에 삽입함으로써
일명, 예언자일보 프로젝트를 마무리 한다.


1. 변수 선언
- 동영상 파일을 불러오기 위한 변수 선언. 캠 영상과 그 형태가 같다.


2. 파일 불러오기
- 동영상 파일의 경로를 설정한다.





3. 프레임 이미지 얻어오기
- 현재 프레임의 이미지를 임시 변수인 IplImage* MusicVideo에 가져온다.
이 변수는 메모리를 할당받아 사용하는 것이 아니라 프레임의 주소만을 가져오므로 따로 메모리를 해제하지 않는다.

- 이미지의 크기를 이용하여 뮤직비디오의 좌표계를 설정한다.



4. 좌표 변환행렬 생성 및 와핑
- 마커의 네 꼭지점을 위와 같은 순서(LEFT-TOP → RIGHT-TOP → RIGHT-BOTTOM → LEFT_BOTTOM)로 정렬한 뒤,
ptPrespective 변수에 넣는다.



- 변환행렬 생성 및 와핑. OpenCV의 장점이 유감없이 발휘되는 시간이다.
와핑에 대한 자세한 내용은 cvWarpPerspective() 사용 방법을 참고하면 된다.



5. 최종테스트
- 멀티미디어 신문



- 다중 마커 테스트



캠을 사면 제일 먼저 해보리라 마음 먹었었던, 예언자일보 프로젝트를 강좌형식으로 진행하면서
예상치 못했던 많은 사람들이 함께 공감해주고 즐거워하는 것에 대단히 보람을 느꼈습니다.

저역시 아직 공부하는 단계이고 부족한 것이 많은데도 불구하고,
다른 강좌를 이끌어 달라는 메일과 쪽지들에 고맙기도 하면서,
부족한 제 모습에 한편으로 무거운 마음 금할 길이 없습니다.

형식이 그러하다 보니 아무래도 시간 소요가 많은 것은 사실입니다만,
제가 어설프게 알고 있던 부분들을 누군가에게 이야기하기 위해 더 자세하고 확실하게 알아야 한다는 점은
강좌형식으로 프로젝트를 진행해 나갈 때의 소중한 장점 중 하나입니다.

앞으로도 영상처리와 관련된 다양한 아이템들로 강좌를 진행할 예정입니다.
부디 초보자분들에게는 영상처리 개념을 잡는데 도움이 되고,
중고급 프로그래머분들에게는 답글을 달 "꺼리'를 제공할 수 있고, 토론의 장이 될 수 있는 그런 강좌들이 되면 좋겠습니다.

고맙습니다.


신고
54 Comments
  • 이전 댓글 더보기
  • 슈엔똘 2010.11.03 17:16 신고 아^^ 좋은 참고가 되었습니다. 크크~
    그런데 이전 프레임의 마커정보에 출력을 해주는 방법이라고 하면, 카메라가 움직일때는 증강이 잘못 되어지게 되겠군요~!^^;; 아닌가.. 음.. 전 PCA를 이용해서 가려진 부분을 복원해보려 했는데.. 실시간으로 트레킹 되는 점을 생각하면 느려지지 않을까 해서요..ㅠ 윤곽선 정보를 이용하게 된다면 내부/외부의 윤곽선이 가려지는 경우도 .. 혹시 허프만 알고리즘을 이용해서 윤곽선을 찾아낸다면 괜찮은 방법인지.아~ 이것저것 참 생각이 많아서 마틴님 블로그에 주절주절 글을 남겨보게되네요^^
  • Favicon of http://martinblog.net K. Martin 2010.11.04 16:35 신고 고맙습니다. 실시간추출을 위해서 어떤 알고리즘이 더 좋을지는 저도 늘 고민하고 있답니다.
    종종 들러주셔서 이런저런 이야기 나눌 수 잇으면 좋겠네요.
  • 뽐갱 2010.11.13 02:51 신고 마틴님~~강좌 너무 너무 잘봤습니다. 동영상 말고 ARToolKit에서 사용하는 3차원 그래픽을 마틴님의 소스에 가져와서 증강을 시켜보고 싶은데 이리 저리 시도를 해보고 있지만 잘 안되네요..ㅠ 조언 부탁드려봅니다 ^^
    즐거운 금요일 저녁 보내세요~~
  • 흐밍흐밍 2011.03.23 19:09 신고 영상을 나올때 음성까지 같이 나오게 하는 방법은 없나여???
  • Favicon of http://martinblog.net K. Martin 2011.03.29 09:00 신고 DirectX 등을 이용하여 직접 구현하셔야 됩니다.
  • 박성훈 2011.04.04 14:06 신고 마틴님은 제 한줄기 희망과도 같은 분이에요 ㅠㅠ

    증강현실로 졸작하는데 주변에 증강현실 가르쳐줄 분이 없었거든요.

    교수님은 감독만 하는거라 ㅠㅠ

    근데 몇일 동안 증강현실 검색하다가 우연히 마틴님 홈피에!!!

    이건 운명이에요 ㅋㅋㅋ

    정말 많은거 배우고 갈게요. 가끔씩 질문해도 되나요?

    졸작남은기간이 2달정도 남았는데,, 질문해도 되죠?
  • Favicon of http://martinblog.net K. Martin 2011.04.05 09:03 신고 질문은 언제나 환영하며,
    제가 알고 있는 부분은 최선을 다해 설명을 드릴 수 있도록 하겠습니다.
    열심히 하세요. 화이팅!
  • 흐밍흐밍 2011.04.07 02:12 신고 제가 영상 매핑까지 시켰는데
    영상이 매핑시킨곳을 축으로 하여 가로세로로 쭈욱


    ㅁㅁㅁㅁㅁㅁㅁ


    이렇게 나오는데 어느부분을 건드려야 할까여??
    초기화가 안되서 그런가?? 바쁘신데 답변 부탁드릴께여 마틴님 ^^
  • 흐밍흐밍 2011.04.07 02:33 신고 제가 opencv2.0을 쓰는데 원래 1.0에서는 잘나오는데 2.0으로 가니깐 이러네여
    먼지 잘몰르겠어여 왜이러는징;;
  • Favicon of http://martinblog.net K. Martin 2011.04.19 10:56 신고 저도 그렇네요. 원인을 한 번 알아봐야겠네요.
  • 박성훈 2011.04.07 10:13 신고 안녕하세요 ㅋㅋ

    마틴님께서 질문환영한다고 하셔서

    질문 대방출하려고요ㅋㅋㅋ

    1. 마틴님이 만드신 소스가 여러개의 마커를 인식하여 그것들에 한개의 동영상을 다 넣을 수 있는 거잖아요. 그럼 여러개의 마커가 있을때 각각의 마커에 다른 동영상을 넣고 싶은데 이거 많이 어려운건가요?

    2. 위에 이현준님께 1번 질문에 대하여 메일을 보냈더니 탬플릿매칭을 이용해 보라고 하더라구요. 그래서 탬플릿 매칭을 해보려고 제가 한번 실험 해봤어요. A에는 배경이미지 B는 배경에서 내가 찾고싶은 이미지 C는 배경에서 내가 찾고싶은 이미지에 사각형을 그리는것. 근데 여기서 막히는게요 B이미지 크기가 A에서의 B이미지보다 크게되면 B이미지를 찾지 못하더라구요. 동영상이라면 물체가 앞뒤로 움직이니까 화면내에서 제가 찾고싶은 이미지의 크기가 계속 변하잖아요. 이런 문제는 어떻게 해결해야할까요? ㅠㅠ
    진짜 미치겠어요.. 완전 초보인데 제게 이런 어려운 문제를 혼자하려니까요 ㅠㅠ(나머지 조원 2명은 컨텐츠담당이라...ㅠㅠ)

    마틴님 도와주세요...! 시간이 되신다면 나중에 여러마커에 각각의 동영상 넣기도 강의해주시면 직접 저희 조원들과 찾아가서 감사의 표시라도 하고싶네요 ㅠㅠ
  • Favicon of http://martinblog.net K. Martin 2011.04.19 10:58 신고 1. 난이도 중상
    2. 템플릿매칭 알고리즘 중에도 크기변화에 덜 민감한 것들이 있습니다. 쉽게 설명하면 비교하려는 사진을 여러 크기로 변환해 가면서 템플릿매칭 하시면 됩니다.
    3. 개인적인 강의는 하지 않습니다.

    답변이 되었길 바랍니다. 즐거운 하루 되세요.
  • chang 2011.05.14 18:07 신고 안녕하세요..ㅎ 강좌 잘 따라해보고 많이 배웠습니다. 근데 너무 궁금한게 있는데요.

    1. 마지막에 동영상파일(Soas.avi)과 연결 시켜 주었잖아요? 그 부분을 동영상 대신사진파일과 연결해주고 싶으면 어떻게 고쳐조야 하나요? (동영상 말고 사진을 띄워보고 싶어서요...)
    2. 마커의 네개의 꼭지점 좌표를 구해서 그 안에서 동영상이 구동되는데 마커인식 후 마커크기 보다 크게 동영상이 표시되게 하려면 어떻게 해야 하나요?
  • TommyHSM 2011.05.23 23:37 신고 안녕하세요 ^^

    CV 카페에서 보고 왔습니다.

    하나하나 따라하면서 하고있는데, 질문이 있어 여쭙니다.

    마커 인식후 동영상을 틀면,

         ㅁ
         ㅁ
      ㅁㅁㅁㅁㅁㅁㅁ
         ㅁ
         ㅁ

    ㅁ-> 동영상입니다.

    위에처럼 1개가 나오는게 아니구,

    같은영상이 출력이 저렇게 되네요;;

    십자모양의 가운데가 마커부분이구요,

    중심을 기준으로 inverse가 되고, 다시 그것의 inverse가 되서

    출력이 됩니다.

    디버깅 해봐도 좌표나 다른거는 이상이 없는데 유독 저렇게 출력이 되니 답답해서 글을 적습니다.

    좀 알려주세요~
  • 김성훈 2011.05.28 14:16 신고 "밤비아빠" 님이랑 같은 증상입니다....ㅠ
    저두 윈7 이고요 동영상체크안하면 좌표 표시 잘 나오는데 동영상체크하면 좌표표시는 없어지는데 동영상 안나와요..ㅠ 첨부파일 받아서 그대로 실행 시켜봤는데도 안되네요...ㅠ
    코덱이 문제인것두 아니고.... 한참을 기다려봐도 안나오네요.
  • 조정연 2011.07.14 16:12 신고 안녕하세요ㅠ_ㅠ
    마틴님이 작성하신 강좌들을 쭉 보고 있는데요
    궁금점이 있어서요 !
    혹시 CAM이 아닌 다른기계를 사용할 경우에는
    어떻게 해야되나요 ?
    혹시 알고 계신다면 알려주세요~
  • Favicon of http://martinblog.net K. Martin 2011.07.23 01:25 신고 다른 장비 어떤 것을 말씀 하시는지요?
    보통의 카메라들은 프레임그래버 등을 이용해서 이미지를 가져온 뒤 OpenCV에서 사용 가능한 형태로 변환하여 사용이 가능합니다.
  • 흐밍흐밍 2011.08.06 18:28 신고 안녕하세여 마틴님^^
    동영상 fps 때문에 질문드리는데
    RetrieveFrame 할 때 프레임 번호를 넣을수 있다고 하셨는데여
    보통 RetrieveFrame(capture) 이렇게 사용하지만
    프래임 번호를 넣을땐 어떻게 넣어야 하는지;;
  • Favicon of http://martinblog.net K. Martin 2011.08.12 11:17 신고 cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 0);
    상기 함수를 이용하여 프레임번호를 설정할 수 있습니다.
    다만, AVI 파일만 적용 가능한 것으로 알고 있습니다.
  • 최C 2011.09.27 21:23 신고 너무 좋은 사이트네요

    그런데 다름이 아니라 몇몇 윗분들처럼 저도

    open cv 2.0에서 예제파일을 돌려서 참고하고있거든요...

    그런데 꼭지점부분들은 찾아서 사각형 모양이 뜨는데... 뮤직비디오를 체크하면 사각형의 선들은 사라지고 동영상이나와야하는데 동영상은 안나오고 사각형 선들만사라지네요

    동영상을 나오게 하려고 하는데 어디가 잘못된건지 찾지 못해서 글 남깁니다.

    1~8장까지는 잘 따라했거든요 그런데 동영상에서 막히네요... 꼭좀 부탁드립니다.
    티느님~
  • 묭준 2011.10.24 19:18 신고 마틴님 강의 보고 따라하고 있습니다
    다름이 아니라 위 완성 소스에
    마커 혹시 받아 볼수 있을까요??
    좋은 강의에 감사 드립니다.
  • 서성 2013.03.23 16:13 신고 으아 정말 감사합니다ㅠㅠ
  • 2013.11.26 14:15 신고 좋은 정보 감사합니다ㅜㅜㅜ
    혹시 코드 구할수 있을까요ㅜㅜ
  • MFC초보 2014.08.10 18:26 신고 감사합니다. 잘보겠습니다. MFC 로 영상처리에 관심이 있습니다.., 혹시 초보자가 참고 할 만한 책이 있으시면... 추천좀 부탁드려요. 감사합니다.
  • JMkim 2015.07.22 19:21 신고 정말 정말 많이 배웠습니다.
    언제나 행복하시고, 건강하시기 바랍니다. 복 받으실꺼에요!!!
  • ksks 2015.12.15 10:33 신고 제가 참고하면서 하다가 보니
    마커안에 동영상이 들어가는게 아니라
    창이하나 뜨고 그 안에서 마커크기에 맞게 움직이는데
    이 창을 어떻게 없애고 마커에 동영상이 들어가있는것처럼 보게 하는건가요...??ㅠㅠ
    cvWarpPerspective(frame,frame11,mat,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0));

    cvReleaseMat(&mat);
    cvNamedWindow("Perspective_Warp",CV_WINDOW_AUTOSIZE); cvShowImage("Perspective_Warp",frame11);

    끝부분 코드입니다!!
  • 이수형 2017.04.17 17:54 신고 감사합니다 덕분에 많이 배웠습니다
댓글쓰기 폼