2012-03-14 18 views
6

मैं एक छवि को दूसरे में खोजने का प्रयास कर रहा हूं।मैं OpenCV MatchTemplate का उपयोग कैसे करूं?

im = cv.LoadImage('1.png', cv.CV_LOAD_IMAGE_UNCHANGED) 
    tmp = cv.LoadImage('e1.png', cv.CV_LOAD_IMAGE_UNCHANGED) 
    w,h = cv.GetSize(im) 
    W,H = cv.GetSize(tmp) 
    width = w-W+1 
    height = h-H+1 
    result = cv.CreateImage((width, height), 32, 1) 
    cv.MatchTemplate(im, tmp, result, cv.CV_TM_SQDIFF) 
    print result 

जब मैं इसे चलाता हूं, सबकुछ ठीक से निष्पादित होता है, कोई त्रुटि नहीं फेंकती है। लेकिन मुझे यकीन है कि यहां से क्या करना है। डॉक्टर कहते हैं कि result स्टोर "तुलना परिणामों का एक मानचित्र"। मैंने इसे प्रिंट करने की कोशिश की, लेकिन यह मुझे चौड़ाई, ऊंचाई और कदम देता है।

मैं इस जानकारी का उपयोग यह पता लगाने के लिए कैसे करूं कि एक छवि दूसरे में है या नहीं, जहां यह स्थित है?

+1

तो आप OpenCV के साथ अधिक संघर्ष नहीं करते हैं, SimpleCV आज़माएं। यह ओपनसीवी मॉड्यूल के चारों ओर एक रैपर है जो उन्हें उपयोग करने में आसान बनाता है: http://simplecv.org/ – Blender

उत्तर

7

MatchTemplate एक समानता मानचित्र देता है और कोई स्थान नहीं। फिर आप इस स्थान का उपयोग किसी स्थान को ढूंढने के लिए कर सकते हैं।

आप केवल एक ही मैच के लिए देख रहे हैं आप किसी स्थान प्राप्त करने के लिए कुछ इस तरह कर सकता है:

minVal,maxVal,minLoc,maxLoc = cv.MinMaxLoc(result) 

फिर minLoc सबसे अच्छा मैच के स्थान है और minVal बताता है कि कैसे अच्छी तरह से टेम्पलेट फिट बैठता है। यह निर्धारित करने के लिए कि क्या आप इस परिणाम को एक मैच मानते हैं या नहीं, आपको minVal के लिए थ्रेसहोल्ड के साथ आने की आवश्यकता है।

यदि आप प्रति छवि एक से अधिक मैच की तलाश में हैं तो आपको गैर-अधिकतम दमन जैसे एल्गोरिदम का उपयोग करने की आवश्यकता है।

+0

तो अगर मैं एक विधि का उपयोग कर रहा था जो maxLoc पर सबसे अच्छा मैच रिकॉर्ड करता है तो मैं maxVal को देखता हूं? – bakalolo

4

यह आपके लिए काम कर सकता है! :)

def FindSubImage(im1, im2): 
    needle = cv2.imread(im1) 
    haystack = cv2.imread(im2) 

    result = cv2.matchTemplate(needle,haystack,cv2.TM_CCOEFF_NORMED) 
    y,x = np.unravel_index(result.argmax(), result.shape) 
    return x,y 

CCOEFF_NORMED कई तुलनात्मक मेथॉड्स में से एक है। देखें: http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html पूरी सूची के लिए।

सुनिश्चित नहीं है कि यह सबसे अच्छी विधि है, लेकिन तेज़ है, और मेरे लिए ठीक काम करता है! :)

संबंधित मुद्दे