# -*- coding: utf-8 -*- #匹配 __author__ = '上海色宁' import os import sys import cv2 import numpy as np import uuid def load_digits(): # 加载数字模板 path = './templates' # 这个地方就是获取当前运行目录 获取函数在主函数里面 digits.append([cv2.imread(path + "/00.jpg",cv2.IMREAD_GRAYSCALE),0]) digits.append([cv2.imread(path + "/00-2.jpg",cv2.IMREAD_GRAYSCALE),0]) digits.append([cv2.imread(path + "/01.jpg",cv2.IMREAD_GRAYSCALE),1]) digits.append([cv2.imread(path + "/02.jpg",cv2.IMREAD_GRAYSCALE),2]) digits.append([cv2.imread(path + "/03.jpg",cv2.IMREAD_GRAYSCALE),3]) digits.append([cv2.imread(path + "/04.jpg",cv2.IMREAD_GRAYSCALE),4]) digits.append([cv2.imread(path + "/05.jpg",cv2.IMREAD_GRAYSCALE),5]) digits.append([cv2.imread(path + "/06.jpg",cv2.IMREAD_GRAYSCALE),6]) digits.append([cv2.imread(path + "/07.jpg",cv2.IMREAD_GRAYSCALE),7]) digits.append([cv2.imread(path + "/08.jpg",cv2.IMREAD_GRAYSCALE),8]) digits.append([cv2.imread(path + "/8-1.jpg",cv2.IMREAD_GRAYSCALE),8]) digits.append([cv2.imread(path + "/8-2.jpg",cv2.IMREAD_GRAYSCALE),8]) digits.append([cv2.imread(path + "/09.jpg",cv2.IMREAD_GRAYSCALE),9]) ''' filename = os.listdir(path) # 获取文件夹文件 for file in filename: img = cv2.imread(path + "/" + file) # 读取图片 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度处理 #cv2.imshow('YelloThings',img_gray) t,dst1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) HSV = cv2.cvtColor(dst1, cv2.COLOR_BGR2HSV) H, S, V = cv2.split(HSV) LowerYellow = np.array([20, 20, 20]) UpperYellow = np.array([30, 255, 255]) mask = cv2.inRange(HSV, LowerYellow, UpperYellow) YelloThings = cv2.bitwise_and(dst1, dst1, mask=mask) #cv2.imshow('YelloThings',YelloThings) #cv2.imwrite(path+"/_"+file, YelloThings) digits.append(YelloThings) digits.append(img) ''' def get_most_simmilar_digit(target_img): source = [] # 遍历数字模板 for digitROI in digits: # 进行模板匹配 #cv2.imshow('target_img',target_img) #cv2.imshow('digitROI',digits[4]) res = cv2.matchTemplate(target_img, digitROI, cv2.TM_CCOEFF_NORMED) max_val = cv2.minMaxLoc(res)[1] source.append(max_val) #print(source) print(source.index(max(source))) if max(source) > 0.5 : return source.index(max(source)) else: return '-' def get_digital(target_img): digitals = [] #[175,235,275,310] 35 60 #[175,235,313:348] 35 60 #[175,235,345:380] 35 60 #[175,235,385:420] 35 60 digitals.append(get_most_simmilar_digit(frame[175:235,275:310])) digitals.append(get_most_simmilar_digit(frame[175:235,313:348])) digitals.append(get_most_simmilar_digit(frame[175:235,345:380])) digitals.append(get_most_simmilar_digit(frame[175:235,385:420])) print(digitals[0]) if digitals[0] == '-': return str(digitals[1])+"."+str(digitals[2])+str(digitals[3]) else: return str(digitals[0])+str(digitals[1])+"."+str(digitals[2])+str(digitals[3]) digits = [] # 测试 if __name__ == '__main__': #cap = cv2.VideoCapture("rtsp://admin:sdk12345@172.17.17.205:554/Streaming/Channels/101")#获取网络摄像机 #cap = cv2.VideoCapture("rtsp://admin:sdk12345@10.1.0.32:9361/Streaming/Channels/101") load_digits(); cap = cv2.VideoCapture("video.mp4") i = 0 while i < 10: ret, frame = cap.read() img = frame t,dst1 = cv2.threshold(img,170,255,cv2.THRESH_BINARY) HSV = cv2.cvtColor(dst1, cv2.COLOR_BGR2HSV) H, S, V = cv2.split(HSV) LowerYellow = np.array([20, 20, 20]) UpperYellow = np.array([30, 255, 255]) mask = cv2.inRange(HSV, LowerYellow, UpperYellow) YelloThings = cv2.bitwise_and(dst1, dst1, mask=mask) #cv2.imshow('YelloThings',YelloThings) addtext =get_digital(YelloThings) cv2.putText(frame, addtext, (320, 150), cv2.FONT_HERSHEY_COMPLEX, 1.5, (100, 200, 200), 5) cv2.imshow("capture", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()