好吧,我一直想知道在图像/模板中查找变形子图像的好方法是什么。目前我正在使用 cv2.matchTemplate,它有时会起作用,它取决于给定的容差级别和背景“噪音”:其他对象可能相似,因此如果容差返回结果是高。
当前的算法是这样的(伪)/只返回一个匹配项(多匹配项类似——这是这个问题的实际情况):
haystack = im.read("stack.bmp")
image = Image.open("im.bmp")
MATCH = []
PIL_rotateImage for 0 to 360: # You get the point..
image = np.array(rotatedImage)
result = cv2.matchTemplate(image, haystack, algorithm) #algorithm: CCOEFF_NORMED
resultMax = result.max()
y,x = np.unravel_index(result.argmax(), result.shape)
MATCH.append([resultMax, (x,y)])
Best_match = sorted(MATCH, key=itemgetter(0))[0]
if Best_match[0] < minval: return False
*.....*
假设您有一个包含变形(部分和/或旋转)子图像的模板,它是完全相同的图像(对于人眼):
- 物体可以旋转
- 对象可以是部分的(但在可容忍的水平 - 例如:60%)
- 颜色并不总是相同的,而是相似的。(有一个比较颜色的算法)
- 对象并不总是在那里...
- 物体可能有点变形:一些像素可能“错位”
- 有些东西可能会被遗忘:但总的来说:变形。
我也尝试过迭代列表,但这显然很慢,我这样做的方式只是检查一些第一个/最后一个或中心像素是否相同.. <- 当然不适用于查找部分,或旋转的物体。
一个小图片(例子)来支持我的写作,帮助你理解:只是一个例子!
问:有没有人有任何提示、伪代码或实际代码如何解决这个问题?可以让我开始的东西,因为我经常迷路。