現在、PythonのOpenCVでORBを用いて特徴点マッチングを行い、射影変換行列を求め、画像を射影変換するプログラムを書いています。
Python
1cv2.warpPerspective(img, h, (width, height)) 2#hは射影変換行列
このcv2.warpPerspectiveの引数にwidth、heightを指定せずに、元画像全体が残るように自動的にサイズを決定することはできないのでしょうか。他の方法でも知っている方がいれば教えていただきたいです。
現在書いているコードです。
Python
1import cv2 2import numpy as np 3 4img1 = cv2.imread('purpose_image.jpeg',cv2.IMREAD_GRAYSCALE) 5img2 = cv2.imread('input_image.jpeg',cv2.IMREAD_GRAYSCALE) 6max_pts=1000 7good_match_rate=0.5 8min_match=200 9 10detector = cv2.ORB_create(max_pts) 11kp1, des1 = detector.detectAndCompute(img1,None) 12kp2, des2 = detector.detectAndCompute(img2,None) 13bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) 14matches = bf.match(des1, des2) 15matches = sorted(matches, key=lambda x: x.distance) 16good = matches[:int(len(matches) * good_match_rate)] 17 18if len(good) > min_match: 19 src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2) 20 dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2) 21 h, mask = cv2.findHomography(dst_pts,src_pts,cv2.RANSAC) 22 cv2.imwrite('/User_path/image.jpeg', cv2.drawMatches(img1, kp1, img2, kp2, good, None, flags=2)) 23 height, width = img1.shape 24 dst_img = cv2.warpPerspective(img2, h, (width, height)) 25 cv2.imwrite('/User_path/image_match.jpeg',dst_img) 26else: 27 cv2.imwrite('/User_path/purpose_image',img1)
回答2件
あなたの回答
tips
プレビュー