2016-05-04 22 views
3

我想在Python中創建一個腳本(使用OpenCV庫),該腳本確定圖片中的哪些標記。標記是這個樣子:檢測二維圖像中的標記[Python/OpenCV]

Markers

加載圖像後,腳本應該打印的標記是在畫面(返回標記的數字)。例如,如果我負荷這樣的畫面:

Image with markers

對於該圖像的腳本應該返回三個數字: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() 

但顯然它不是我所需要的只包圍矩形。 感謝您的任何提示和幫助。

+1

1.找到外輪廓。 2.爲每個輪廓選擇邊界框(由於圖像中的外部輪廓是正方形,應該與輪廓相同)3.調整圖像大小,使其與參考標記尺寸相同。 4.對調整大小的圖像區域和參考標記的Canny邊緣圖像使用倒角匹配。 5.如果一個倒角匹配足夠小,選擇最小的一個作爲檢測標記 – Micka

+1

如果您有額外的透視失真,您必須找到四邊形而不是邊界框並使用透視變形。 – Micka

+1

我可能會嘗試功能匹配,如http://docs.opencv.org/3.1.0/d1/de0/tutorial_py_feature_homography.html#gsc.tab=0所述,但我沒有得到它的工作。也看看這篇文章:http://stackoverflow.com/questions/20259025/module-object-has-no-attribute-drawmatches-opencv-python – tfv

回答

0

首先,我嘗試使用特徵匹配(由@tfv用戶提出),但它可能不是一個好的解決方案。在許多方法它給了太多的比賽(但圖像是完全不同的)或過少的比賽(如果圖像是一樣的)

Markers

現在,我將嘗試使用由@Micka的算法,但我有一個問題與第二點和第三點。上面我的帖子中的代碼找到正方形。如何將新矩形保存爲新圖像?

enter image description here