2016-06-07 12 views
1

Teil meines Code ist:Typeerror während Template-Matching in opencv Python

import pyscreenshot as ImageGrab 
img=ImageGrab.grab() 
img = img.load() 
img = np.array(img) 
template = cv2.imread('s2_5.jpg',0) 
res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF) 

ich die folgende Fehlermeldung erhalten:

Traceback (most recent call last): 
    File "E:\python\opencv\template_matching.py", line 20, in <module> 
    res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF) 
TypeError: image data type = 17 is not supported 

Antwort

1

Sie diesen Fehler erhalten, weil img und template nicht sind der gleiche Typ, und noch wichtiger, wie die Fehlermeldung sagt, img 's-Typ wird nicht von cv2.matchTemplate() unterstützt.

In Zeile 20 Ihres Codes gibt ImageGrab.grab() ein PIL/Pillow-Bild zurück. Sie müssen also img in ein numpliges Array konvertieren, bevor Sie es als Eingabe von cv2.matchTemplate() verwenden.

+0

In Zeile 4 habe ich dieses Bild in ein numpliges Array konvertiert. 'img = np.array (img)' –

+1

@rajinikanth konvertiert explizit zu 'uint8'. – Miki

+0

jetzt habe ich diesen Fehler: 'Traceback (letzter Aufruf zuletzt): Datei" E: \ Python \ opencv \ template_matching.py ", Zeile 14, in img = np.array (img, dtype = np.uint8) TypeError: long() Argument muss eine Zeichenfolge oder eine Zahl sein, nicht 'PixelAccess' ' –