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 이미지 조합 을 실현 하 는 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.