#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""These functions calculate the similarity of two images of the same size."""
import cv2
import numpy as np
from ha4t.aircv.utils import img_mat_rgb_2_gray
[文档]
def cal_ccoeff_confidence(im_source, im_search):
"""求取两张图片的可信度,使用TM_CCOEFF_NORMED方法."""
# 扩展置信度计算区域
im_source = cv2.copyMakeBorder(im_source, 10,10,10,10,cv2.BORDER_REPLICATE)
# 加入取值范围干扰,防止算法过于放大微小差异
im_source[0,0] = 0
im_source[0,1] = 255
im_source, im_search = img_mat_rgb_2_gray(im_source), img_mat_rgb_2_gray(im_search)
res = cv2.matchTemplate(im_source, im_search, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
return max_val
[文档]
def cal_rgb_confidence(img_src_rgb, img_sch_rgb):
"""同大小彩图计算相似度."""
# 减少极限值对hsv角度计算的影响
img_src_rgb = np.clip(img_src_rgb, 10, 245)
img_sch_rgb = np.clip(img_sch_rgb, 10, 245)
# 转HSV强化颜色的影响
img_src_rgb = cv2.cvtColor(img_src_rgb, cv2.COLOR_BGR2HSV)
img_sch_rgb = cv2.cvtColor(img_sch_rgb, cv2.COLOR_BGR2HSV)
# 扩展置信度计算区域
img_src_rgb = cv2.copyMakeBorder(img_src_rgb, 10,10,10,10,cv2.BORDER_REPLICATE)
# 加入取值范围干扰,防止算法过于放大微小差异
img_src_rgb[0,0] = 0
img_src_rgb[0,1] = 255
# 计算BGR三通道的confidence,存入bgr_confidence
src_bgr, sch_bgr = cv2.split(img_src_rgb), cv2.split(img_sch_rgb)
bgr_confidence = [0, 0, 0]
for i in range(3):
res_temp = cv2.matchTemplate(src_bgr[i], sch_bgr[i], cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res_temp)
bgr_confidence[i] = max_val
return min(bgr_confidence)