比较两张图片以确定里面是否有相同的物体

我正在定义一个问题:我有两张图片,例如两张带有1欧元硬币的照片。 如何比较两个图像以得到“是的,它们都包含一个1欧元硬币”?当然,如果第二张图片包含2欧元硬币,则测试应返回false。

我尝试过openCV方法,但是没有那么精确的方法。 此外,机器学习方法也不适用,因为其目标是在没有任何其他数据库的情况下识别两个图像中的两个对象。

shaouwu 回答:比较两张图片以确定里面是否有相同的物体

这在很大程度上取决于您所拥有的图像类型,但是如果它是清晰自上而下的图像,则可以使用淡金色带/中心来区分它们。

首先,根据金色将面膜制成。 (您可能必须使颜色范围更具体-我有一张简单的图像。我使用this convenient script确定颜色范围。)接下来,去除了一些噪点,然后检测到轮廓。没有子轮廓或父轮廓的轮廓是2欧元硬币的牢固中心。 1个硬币的范围是有一个孩子但没有父母的轮廓。与父母但没有孩子的轮廓是1欧元硬币的中心,因此会被忽略。

2欧元变成红色,1欧元变成蓝色。

enter image description here

import cv2
import numpy as np
# load image
img = cv2.imread("E1E2.jpg")
# Convert to HSV
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

# define range wanted color in HSV
lower_val = np.array([0,25,0]) 
upper_val = np.array([179,255,255])

# Threshold the HSV image to get only goldish colors
mask = cv2.inRange(hsv,lower_val,upper_val)

# remove noise
kernel = np.ones((5,5))
mask_open = cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)
mask_close = cv2.morphologyEx(mask_open,cv2.MORPH_CLOSE,kernel)

# find contours
contours,hier = cv2.findContours(mask_close,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)

# loop through contours,check hierarchy,draw contours
for i,cnt in enumerate(contours):
    (prev,nxt,child,parent) = hier[0][i]
    if child == -1 and parent == -1 :
        # €2
        cv2.drawContours(img,[cnt],(0,255),3)
    if child != -1 and parent == -1 :
        # €1
        cv2.drawContours(img,(255,0),3)

# display image
cv2.imshow("Res",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
本文链接:https://www.f2er.com/3137634.html

大家都在问