opencv图像匹配并定位

from skimage.measure import compare_ssim
import argparse
import imutils
import cv2
from IP_camera.make_image_data import picture

# ap = argparse.ArgumentParser()
# ap.add_argument("-f", "--first", required=True, help="first input image")
# ap.add_argument("-s", "--second", required=True, help="second input  image")
# args = vars(ap.parse_args())

imageA = cv2.imread('IP_camera/frames_1.jpg')
# imageA = cv2.resize(imageA, (540, 960))
imageB = cv2.imread("IP_camera/frames_2.jpg")
# imageB = cv2.resize(imageB, (540, 960))

grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

# 计算结构相似度 ssim
(score , diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff*255).astype("uint8")
print("SSIM:{}".format(score))


# 设置ssim的阈值,  寻找角点find contours
thresh = cv2.threshold(diff, 100, 255, cv2.THRESH_BINARY_INV | cv2.RETR_EXTERNAL)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
                        cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)

# 画出不同的图像的位置
for c in  cnts:
    (x, y, w, h) = cv2.boundingRect(c)
    if w>50 and h>50:
        cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)
        cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 展示
cv2.imshow('Original', imageA)
cv2.imshow('Modified', imageB)
cv2.imshow('Diff', diff)
cv2.imshow('Thresh', thresh)
cv2.waitKey(0)

你可能感兴趣的:(项目,opencv)