python - 如何使用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)
请提出解决方案。
解决方案
推荐阅读
- java - java.lang.NoClassDefFoundError: org/apache/commons/lang3/Range
- javascript - 在新行中返回每个新数组项
- php - Laravel 上传图片
- ssl - 替换 Windows 中 OpenSSL 的默认 TLS 堆栈
- python - 如何使用 python/pandas 从这个网页读取表格?
- node.js - 是否可以在后端添加回调方法以在查询完成后执行?
- css - 如何在Angular 6中拥有一个没有继承css的组件
- java - PKIXNameConstraintValidatorException:DNS 不是来自允许的子树
- sql - 来自同一个表的自连接列,计算一列不显示列名
- javascript - React-Native,如何使用外部变量访问对象属性?