java 图像识别 查找一张图片在另一张图片的位置?
查找一张图片在另一张图片的位置 现在能实现完全匹配 但是图片有图层是透明的 导致完全匹配不上 可以按照匹配相似的百分比识别么 可以付费
大图
小图
查找小图在大图中的位置
回答:
方法一
我尝试了一些案例,这是我能找到的效果最好的案例了,官方给的,java 也能用,自己改写一下就行。
import matplotlib.pyplot as pltimg1 = 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