from imutils import contours
import numpy as np
import argparse
import cv2 as cv
import myutils
def cv_show(name,img):
cv.imshow(name,img)
cv.waitKey(0)
cv.destroyAllWindows()
# 先处理template
tempalte_img = cv.imread("E:/opencv/picture/ocr_a_reference.png")
tempalte_gray = cv.cvtColor(tempalte_img, cv.COLOR_BGR2GRAY)
tempalte_thres = cv.threshold(tempalte_gray, 0, 255, cv.THRESH_OTSU |
cv.THRESH_BINARY_INV)[1]
temp_a, tempalte_contours, temp_b = cv.findContours(tempalte_thres.copy
(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(tempalte_img, tempalte_contours, -1, (0, 255, 0), 2)
tempalte_contours = contours.sort_contours(tempalte_contours, method="left-to-right")[0]
digits = {} # 构建一个字典
for (i, c) in enumerate(tempalte_contours):
(x, y, w, h) = cv.boundingRect(c)
tempalte_roi = tempalte_thres[y:y + h, x:x + w] #之前一直检测不出正确答案,原因是这里的roi应该是tempalte_thres一部分
#而不是template_gray的一部分!
tempalte_roi = cv.resize(tempalte_roi, (57, 88))
digits[i] = tempalte_roi
cv_show('template_single',tempalte_roi)
#cv_show('template_single',tempalte_roi)
#对银行卡进行处理,之所以要做成数字长条,是想通过长条的尺寸比例大小来将自己想要的数字给抠出来。
rectkernel = cv.getStructuringElement(cv.MORPH_RECT,(9,3))
squrkernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5))
image = cv.imread("E:/opencv/picture/credit_card_02.png")
image = myutils.resize(image, width=300)
image_gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
image_tophat= cv.morphologyEx(image_gray,cv.MORPH_TOPHAT,rectkernel)
image_close = cv.morphologyEx(image_tophat,cv.MORPH_CLOSE,rectkernel)
cv.imshow("image_tophat",image_tophat)
cv.imshow('image_close',image_close)
image_thres= cv.threshold(image_close,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)[1]
image_contours= cv.findContours(image_thres.copy(),cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)[1]
locs = []
for(n,con) in enumerate(image_contours):
(gx,