一张图片匹配到另一张图片中

原图:

在这里插入图片描述
在这里插入图片描述

效果图:

在这里插入图片描述

代码如下:

import cv2
import numpy as np

def preprocessing(original_path,img_crop):
    # 读取原始截图和图片
    img_original = cv2.imread(original_path)
    img_crop = cv2.imread(img_crop)

    # 检查一下图像深度是否匹配
    print(img_original.dtype, img_crop.dtype)

    #

def matchTemplate(original_path,img_crop):
    # 读取原始截图和图片
    img_original = cv2.imread(original_path)
    img_crop = cv2.imread(img_crop)

    # 调整红外图的尺寸                  宽    高
    img_crop = cv2.resize(img_crop, (530, 417), interpolation=cv2.INTER_CUBIC)

    # 将原始图片和截图转换为灰度图
    img_original_gray = cv2.cvtColor(img_original, cv2.COLOR_BGR2GRAY)
    gray_crop = cv2.cvtColor(img_crop, cv2.COLOR_BGR2GRAY)

    # 使用OpenCV中的图像匹配函数找到原始图像中与截图最匹配的区域
    """ cv2.TM_CCOEFF:相关系数匹配方法
        cv2.TM_CCOEFF_NORMED:相关系数归一化匹配方法
        cv2.TM_CCORR:相关匹配方法
        cv2.TM_CCORR_NORMED:相关归一化匹配方法
        cv2.TM_SQDIFF:平方差匹配方法
        cv2.TM_SQDIFF_NORMED:平方差归一化匹配方法"""
    res = cv2.matchTemplate(img_original_gray, gray_crop, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    top_left = max_loc
    bottom_right = (top_left[0] + img_crop.shape[1], top_left[1] + img_crop.shape[0])

    # 将截图粘贴到原始图像的匹配区域中
    img_original[top_left[1]:bottom_right[1], top_left[0]:bottom_right[0]] = img_crop

    # 保存拼接后的图像
    cv2.imwrite('result.png', img_original)

if __name__ == '__main__':

    original_path = './dataset/rgb/0001.jpg'
    img_crop = './dataset/dist/0001.jpg'

    # 算法前预处理
    # preprocessing(original_path, img_crop)

    # 匹配并拼接
    matchTemplate(original_path, img_crop)

猜你喜欢

转载自blog.csdn.net/lijiamingccc/article/details/130719973