OpenCV를 사용하여 Nike 이미지에서 태그를 추출하려고합니다. 이것은 튜토리얼 코드에서 가져온 것입니다 : 내가 비록 코드 몇 줄을 수정 한OpenCV TypeError : contour가 numpy 배열이 아니고 스칼라가 아닙니다.
http://opencv-code.com/tutorials/ocr-ing-nikes-new-rsvp-program/
나는를 완전히하지 못하고 있기 때문에 작동하고 있는지 확실하지 않습니다 그 부분에 오류가 (이 없습니다 그것을 실행하십시오.)
'python a.py'명령을 실행할 때. 이 오류가 표시됩니다 -
#!/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()
Traceback (most recent call last):
File "a.py", line 42, in <module>
otcnt = [c for c in cnt if cv2.contourArea(c) < 100]
TypeError: contour is not a numpy array, neither a scalar
a.py:- 파이썬 프로그래밍 (그리고 파이썬 구문) 아주 새로운 그리고 난 어쨌든 파이썬에서이 작업을 수행했습니다. 나는 당신이 그것의 완전한 정확한 버전을 게시하거나 어떤 코드 행을 어떤 코드로 대체해야하는지 당신에게 매우 감사 할 것입니다.
감사
추신 stackoverflow에서 내 첫 번째 질문은 어떤 협약도 따르지 않는다면 사과드립니다.
고마워요. 문제가 해결되었습니다. 도와 주셔서 감사합니다. 나는 tesseract를 가져올 때 또 다른 문제에 직면하고있다. 그러나 나는 이것을위한 새로운 질문이 있어야한다고 생각한다. 그것을 지적 주셔서 감사합니다. –