Program/OPEN_CV

[Open CV] 특징점검출과매칭 _ 실전코딩 ( AR비디오 플레이어 )

사막여유 2022. 6. 25. 15:38
728x90

2022.06.26 금일은 실전코딩 AR 비디오 플레이어에  관한 강의였다.

 

 

AR 비디오 플레이어

 - 카메라 프레임에 특정 영상이 나타나면 해당 위치에 동영상을 재생하는 기능

 - 위 영상처럼 하나의 동영상 파일을 카메라 인풋을 받아 인풋 사이즈에 맞춰 리사이즈해주고
   인풋에 합성해서 재생시키는 플레이어를 만든다.

 

구현할 기능

 - 기준 영상과 카메라 프레임 사이의 특징점 검출 및 매칭

 - 호모그래피 계산

 - 동영상 프레임 투시 변환 & 합성

 

구현 방법

 - 내가 설정해 놓은 Reference Image를 카메라 입력 프레임에서 찾는 ( 매칭점 ) 과정이 필요 한데
    이 과정에서 Homograpy 를 계산한다.

그리고 합성할 영상에 Homograpy 를 적용시켜 Warping 을 시켜주어 실제 합성을 시킨다.

 

이론은 이렇게 쉽게 설명될 수 있고 실제 소스코드를 보면서 다시 설명한다.

 

위 소스코드에서 나온 것 처럼 기준영상 ' Korea.jpg ' 를 불러온다.

그리고 'korea.mp4' 동영상 파일을 불러와 두 영상을 합성시키는 코드이다.

 

 

 

특징점 알고리즘은 AKAZE 를 사용해서 생성해준다.

속도면에서는 ORB를 사용하면 좋지만 매칭을 못하는 경우가 더 많기때문에 약간은 느리지만 성능측면에서는 AKAZE를 사용하는 것이 좋다.

 

while True:
    ret1, frame1 = cap1.read()

    if not ret1:
        break

    # 매 프레임마다 특징점 검출 및 기술자 생성
    gray = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
    kp2, desc2 = detector.detectAndCompute(gray, None)

    # 특징점이 100개 이상 검출될 경우 매칭 수행
    if len(kp2) > 100:
        matches = matcher.match(desc1, desc2)

 

위 소스코드를 보게되면 매 프레임마다 특징점 검출을 하는데

특징점 검출이 적게되면 에러가 나는 경우가 있기 때문에 

특징점이 100개보다 많은 경우에만 매칭을 수행하도록 코드를 구성해놓았다.

 

 

ORB 특징점 추출

 

AKAZE 특징점 추출

 

위에서 설명했지만 ORB보다는 AKAZE가 특징점을 조금 더 잘 검출하는 결과를 볼 수 있다.

 

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90