首页 > 解决方案 > 如何使用python比较来自不同图像的对象

问题描述

我正在努力满足我的一项要求。我想比较两个图像。在这两个图像中,都有一个关键的主要对象。我需要检查这些键是否相同。这是持续的要求,每次我都会得到不同的钥匙图像与原始图像进行比较。图像和对象(键)大小不同。我需要分析每个图像中键的脊和凹口,并在此基础上,如果不同图像中的键相同或如何,我需要给出结果。我尝试使用 Homography、OpenCV 和 Canny 来检查边缘和相似点以进行比较,但每次我得到不同的结果,因为在比较图像时会考虑图像背景。

注意:我想比较两个不同图像中存在的对象相似性,而不是图像比较。

我正在考虑的一种方法是从我将两个图像的边缘与 Canny 进行比较,然后开始使用 Homography 检查相似点,但我被困在如何将下面的代码用于两个或多个图像?

import cv2
import numpy as np

image = cv2.imread('MyKey11.jpg')
original = image.copy()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (3, 3), 0)
canny = cv2.Canny(blurred, 120, 255, 1)
kernel = np.ones((5,5),np.uint8)
dilate = cv2.dilate(canny, kernel, iterations=1)

# Find contours
cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

# Iterate thorugh contours and filter for ROI
image_number = 0
for c in cnts:
    x,y,w,h = cv2.boundingRect(c)
    cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
    ROI = original[y:y+h, x:x+w]
    cv2.imwrite("ROI_{}.png".format(image_number), ROI)
    image_number += 1

cv2.imshow('canny', canny)
cv2.imshow('image', image)
cv2.waitKey(0)

请提出解决方案。

标签: pythonopencvhomographycanny-operatorimage-comparison

解决方案


推荐阅读