java 图像识别 查找一张图片在另一张图片的位置?

查找一张图片在另一张图片的位置 现在能实现完全匹配 但是图片有图层是透明的 导致完全匹配不上 可以按照匹配相似的百分比识别么 可以付费
大图

小图

查找小图在大图中的位置


回答:

方法一

我尝试了一些案例,这是我能找到的效果最好的案例了,官方给的,java 也能用,自己改写一下就行。

import matplotlib.pyplot as plt

img1 = cv2.imread('big.jpg', cv2.IMREAD_GRAYSCALE) # queryImage

img2 = cv2.imread('small.jpg', cv2.IMREAD_GRAYSCALE) # trainImage

# Initiate SIFT detector

sift = cv2.SIFT_create()

# find the keypoints and descriptors with SIFT

kp1, des1 = sift.detectAndCompute(img1, None)

kp2, des2 = sift.detectAndCompute(img2, None)

# BFMatcher with default params

bf = cv2.BFMatcher()

matches = bf.knnMatch(des1, des2, k=2)

# Apply ratio test

good = []

for m, n in matches:

if m.distance < 0.80 * n.distance:

good.append([m])

# cv.drawMatchesKnn expects list of lists as matches.

img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

plt.imshow(img3), plt.show()

能够明显的看到大图中接引道童的落点最多。

思路可以是根据每个落点,取得子图片一样大小的区域,找到落点最多的数字,达到一定的落点就认为图片存在包含关系。

这个方法,我估计是 opencv 效果最好的例子了。

方法二

如果你都是这种文字匹配的,我建议直接使用文字 ocr,想要付费的就买,不想要付费的,临时搞一搞就用 macos 13 自带的,我用的就是自带的。

大图

小图

方法三

如果这个需求很重要,可以考虑大量投入,我认为最好的方法是用深度学习。

一些案例

DuplicateImages
image-similarity

以上是 java 图像识别 查找一张图片在另一张图片的位置? 的全部内容, 来源链接: utcz.com/p/945017.html

回到顶部