2016-06-07 6 views
1

Часть моего кода:TypeError в то время как соответствующий шаблон в OpenCV питона

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) 

Я получаю следующее сообщение об ошибке:

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 

ответ

1

Вы получаете эту ошибку, потому что img и template не из один и тот же тип, и что более важно, поскольку сообщения об ошибках говорят, что тип img не поддерживается cv2.matchTemplate().

В строке 20 вашего кода ImageGrab.grab() возвращает изображение PIL/Pillow. Поэтому вам нужно преобразовать img в массив numpy, прежде чем использовать его в качестве входа cv2.matchTemplate().

+0

В строке 4 я преобразовал это изображение в массив numpy. 'img = np.array (img)' –

+1

@rajinikanth явно преобразуется в 'uint8'. – Miki

+0

теперь я получил эту ошибку: «Traceback (последний последний вызов): Файл« E: \ python \ opencv \ template_matching.py », строка 14, в img = np.array (img, dtype = np.uint8) ТипError: long() аргумент должен быть строкой или числом, а не 'PixelAccess' ' –