图像拼接无法正常工作。扭曲的图像被裁剪并且无法进行插值,因为图像不相交。
嗨,我被分配了一项作业,其中我必须将两张由不同相机拍摄的图像拼接在一起。我应该找到单应矩阵,然后使用这个矩阵扭曲第二个图像。最后,我必须对这两个图像进行插值。
不幸的是,我编写的代码似乎无法正常工作。在第二次图像变形期间,我丢失了大部分图像信息;很多像素是黑色的,而不是整个变换后的图像都被变换了。
我以相同的顺序在两个图像中分别跟踪四个像素。下面你可以找到我写的一段代码。
# Globals
points = []
def show_and_fetch(image, title):
cv2.namedWindow(title, cv2.WINDOW_NORMAL)
cv2.setMouseCallback(title, mouse_callback)
# Show the image
cv2.imshow(title, image)
# Wait for user input to continue
cv2.waitKey(0)
cv2.destroyAllWindows()
# mouse callback function
def mouse_callback(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDOWN:
points.append([x, y])
def stitching():
"""
This procedure stiches two images
:return:
"""
print "Stitching starts..."
###########################################################################
# Get input information
in_file_1 = utils.get_input(
"Insert 0 to exit, the path to the first image to stitch "
"or empty input to use default image: ", "string",
constants.default_stitching1)
in_file_2 = utils.get_input(
"Insert 0 to exit, the path to the second image to stitch "
"or empty input to use default image: ", "string",
constants.default_stitching2)
image_1 = utils.read_image(in_file_1)
image_2 = utils.read_image(in_file_2)
global points
show_and_fetch(image_1, "Image 1 to Stitch")
image_1_points = np.asarray(points, dtype=np.float32)
points = []
show_and_fetch(image_2, "Image 2 to Stitch")
image_2_points = np.asarray(points, dtype=np.float32)
matrix, mask = cv2.findHomography(image_1_points, image_2_points, cv2.RANSAC, 5)
image_1_warped = cv2.warpPerspective(image_1, matrix, dsize=image_1.shape[0:2])
utils.show_image_and_wait(image_1_warped, 'Image 1 warped', wait=False)
utils.show_image_and_wait(image_1, 'Image 1', wait=False)
utils.show_image_and_wait(image_2, 'Image 2')
if __name__ == "__main__":
stitching()
我希望扭曲的图像能够被转换,以像素为单位保留大部分信息。然后插值应该应用在某个区域重叠的两个图像的交集。
例如,我想插入这两个图像: