wangzhibo
2022-03-23 f974d1d3e4c89cf1d89f86e50170ebfb93a6445a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# -*- 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()