检测2D图像中的标记[Python/OpenCV]

Lip*_*ick 6 python opencv computer-vision

我想用Python创建一个脚本(使用OpenCV库)来确定图片中的标记.标记看起来像这样:

标记

加载图像后,脚本应该打印图片中的标记(返回标记数).例如,如果我加载这张图片:

带标记的图像

对于这个图像,脚本应该返回三个数字:1,2和3.我有一个脚本,它加载图像并识别图形(圆形,正方形等 - 在下面的脚本中只有正方形)但我不知道整个标记,由几个数字组成.有任何想法吗?请提供有关算法或任何解决方案的任何建议.

import numpy as np
import cv2

img = cv2.imread('B.jpg')
gray = cv2.imread('B.jpg',0)

ret,thresh = cv2.threshold(gray,120,255,1)

contours,h = cv2.findContours(thresh,1,2)

for cnt in contours:
    approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
    print len(approx)
    if len(approx)==4:
        print "square"
        cv2.drawContours(img,[cnt],0,(0,0,255))

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

但显然它不是我需要它只围绕矩形.感谢您的任何提示和帮助.

Lip*_*ick 0

首先,我尝试使用特征匹配(@tfv 用户的提议),但这可能不是一个好的解决方案。在许多方法中,它给出太多匹配(但图像完全不同)或太少匹配(当图像相同时)

标记

现在我将尝试使用@Micka 的算法,但我对第二点和第三点有问题。我上面帖子中的代码找到了方块。如何将新矩形另存为新图像?

在此输入图像描述