# -*- 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()
|