原图:
效果图:
代码如下:
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)