OpenCV TypeError: контур не является ни пустым массивом, ни скалярным

Я пытаюсь использовать OpenCV для извлечения тегов из изображений Nike. Это учебный код взят из:

http://opencv-code.com/tutorials/ocr-ing-nikes-new-rsvp-program/I»

Мы изменили несколько строк кода, и в этой части нет ошибки (не уверен, чтоработает, потому что у меня нетя не смог его полностью запустить.)

Когда я запускаю командуpython a.py ', Эта ошибка отображается: -

Traceback (most recent call last):
  File "a.py", line 42, in 
    otcnt = [c for c in cnt if cv2.contourArea(c) < 100]
TypeError: contour is not a numpy array, neither a scalar

a.py:-I»

#!/usr/bin/env python
import numpy as np
import cv2
import cv2.cv as cv

def do_ocr(img0):
  pass

if __name__ == "__main__":
  img0 = cv2.imread('nike-1.jpg')
  if img0 == None:
    import sys
    sys.exit()
  do_ocr(img0)
img1 = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
img2 = cv2.adaptiveThreshold(img1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 45, 0)
size = np.size(img2)
skel = np.zeros(img2.shape,np.uint8)

ret,img2 = cv2.threshold(img2,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
done = False 
while( not done):
    eroded = cv2.erode(img2,element)
    temp = cv2.dilate(eroded,element)
    temp = cv2.subtract(img2,temp)
    skel = cv2.bitwise_or(skel,temp)
    img2 = eroded.copy()

    zeros = size - cv2.countNonZero(img2)
    if zeros==size:
        done = True
img3 = img2
img4 = cv2.copyMakeBorder(img3, 1, 1, 1, 1, cv2.BORDER_CONSTANT, value=0)
cv2.floodFill(img4, None, (0,0), 255)
img5 = cv2.erode(255-img4, np.ones((3,3), np.uint8), iterations=2)
cnt = cv2.findContours(img5, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0]
cnt = [c for c in cnt if cv2.contourArea(c) > 5000]
mask = np.zeros(img0.shape[:2], np.uint8)
cv2.drawContours(mask, cnt, -1, 255, -1)
dst = img2 & mask
cnt = cv2.findContours(dst.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
otcnt = [c for c in cnt if cv2.contourArea(c) < 100]
cv2.drawContours(dst, otcnt, -1, 0, -1)
api = tesseract.TessBaseAPI()
api.Init(".", "eng", tesseract.OEM_DEFAULT)
api.SetVariable("tessedit_char_whitelist", "#ABCDEFGHIJKLMNOPQRSTUVWXYZ")
api.SetPageSegMode(tesseract.PSM_SINGLE_LINE)

image = cv.CreateImageHeader(dst.shape[:2], cv.IPL_DEPTH_8U, 1)
cv.SetData(image, dst.tostring(), dst.dtype.itemsize * dst.shape[1])
tesseract.SetCvImage(image, api)
print api.GetUTF8Text().string()

Я очень новичок в программировании на Python (и синтаксис Python), и яВ любом случае, делать это в Python. Я буду очень благодарен вам, если вы сможете опубликовать полную правильную версию или указать, какая строка кода должна быть заменена на какую.

Спасибо

постскриптум Мой первый вопрос на stackoverflow, поэтому извиняюсь, если не следую никаким соглашениям.

Ответы на вопрос(1)

Ваш ответ на вопрос