python opencv 이미지 조합 실현 방법

초급 이미지 조합 은 두 그림 을 간단하게 붙 이 는 것 으로 이미지 기하학 적 공간의 전이 와 합성 일 뿐 이미지 내용 과 는 무관 합 니 다.고급 이미지 조합 도 특징 을 바탕 으로 일치 하 는 이미지 조합 이 라 고 하 는데 조합 할 때 두 폭 의 이미지 가 같은 부분 을 없 애고 조합 합성 전경 도 를 실현 한다.
같은 사 이 즈 를 가 진 그림 A 와 그림 B 는 같은 부분 과 다른 부분 을 포함 하고 그림 과 같다.
           
특징 기반 이미지 조합 으로 구현 후:

그림 높이 를 h 로 설정 하고 같은 부분의 너 비 를 wx 로 설정 합 니 다.
맞 춤 형 그림 의 너비 w=wA+wB-wx
따라서 먼저 높이 가 h 이 고 너비 가 W*2 인 빈 그림 을 구축 하여 왼쪽 그림 을 오른쪽으로 wx 로 이동 시 키 고 오른쪽 그림 을 오른쪽 에 붙 일 수 있 습 니 다.오른쪽 그림 이 왼쪽 그림 의 같은 부분 을 덮어 씁 니 다.최종 조립 이미지 가 완성 되 었 습 니 다.완 성 된 이미지 왼쪽 에 폭 이 wx 인 공백 이 있 습 니 다.즉,검 측 된 두 그림 의 같은 부분 입 니 다.필요 에 따라 제거 여 부 를 선택 할 수 있 습 니 다.예시 도 는 아래 와 같다.
상기 효 과 를 실현 하 는 절 차 는 다음 과 같다.
1.surft 특징 검출 알고리즘 을 사용 하여 두 그림 의 관건 적 인 특징 점 을 검출 한다.
2. FLANN 매 칭 기 를 만 들 고 현재 가장 빠 른 특징 매 칭(최근 인접 검색)알고리즘 FlannBasedMatcher 매 칭 관건 점 을 사용 합 니 다.
3.일치 하 는 모든 관건 점 에서 우수한 특징 점 을 선별 합 니 다(거리 기반 선별)
4.조회 이미지 와 템 플 릿 이미지 의 특징 설명 자 색인 에 따라 모방 변환 행렬 을 얻 을 수 있 습 니 다.
5.왼쪽 그림 을 오른쪽 그림 으로 가 져 오 는 투영 매 핑 관계
6.투시 변환 은 왼쪽 그림 을 해당 위치 에 놓 습 니 다.
7.그림 을 특정 위치 에 복사 하여 조합 을 완성 합 니 다.
먼저 python 에서 opencv 를 이용 하여 이미지 조합 을 하 는 코드 를 놓 습 니 다.환경 은 python 2.7+opencv 2 입 니 다.

#coding: utf-8
import numpy as np
import cv2
leftgray = cv2.imread('1.jpg')
rightgray = cv2.imread('2.jpg')
hessian=400
surf=cv2.SURF(hessian) # Hessian Threshold   400,             
kp1,des1=surf.detectAndCompute(leftgray,None) #         
kp2,des2=surf.detectAndCompute(rightgray,None)
FLANN_INDEX_KDTREE=0 #  FLANN      
indexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5) #    ,       5
searchParams=dict(checks=50) #      
#FlannBasedMatcher:            (     )
flann=cv2.FlannBasedMatcher(indexParams,searchParams) #     
matches=flann.knnMatch(des1,des2,k=2) #        
good=[]
#        
for m,n in matches:
 if m.distance < 0.7*n.distance: #                  0.7  ,   
  good.append(m)
src_pts = np.array([ kp1[m.queryIdx].pt for m in good]) #            
dst_pts = np.array([ kp2[m.trainIdx].pt for m in good]) #  (  )          
H=cv2.findHomography(src_pts,dst_pts)   #      
h,w=leftgray.shape[:2]
h1,w1=rightgray.shape[:2]
shft=np.array([[1.0,0,w],[0,1.0,0],[0,0,1.0]])
M=np.dot(shft,H[0])   #                  
dst_corners=cv2.warpPerspective(leftgray,M,(w*2,h))#    ,            
cv2.imshow('tiledImg1',dst_corners) #  ,          
dst_corners[0:h,w:w*2]=rightgray #         
#cv2.imwrite('tiled.jpg',dst_corners)
cv2.imshow('tiledImg',dst_corners)
cv2.imshow('leftgray',leftgray)
cv2.imshow('rightgray',rightgray)
cv2.waitKey()
cv2.destroyAllWindows()
사용 한 그림:
   
맞 춤 법 이 완 료 된 그림 은 다음 과 같 습 니 다.

방 해 력 테스트 에 사용 할 그림:
     
연결 결과:

이 를 통 해 알 수 있 듯 이 방 해 력 이 좋 습 니 다.테스트 에서 연결 이 성공 하지 못 하면 다음 과 같은 두 가 지 를 주의 하 십시오.
1.사용 하 는 두 그림 의 크기 가 같 을 지,같은 부분 이 있 을 지 여부.
2.hessian 의 값 을 적당 하 게 조정 한다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 python opencv 이미지 조합 을 실현 하 는 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기