# -*- coding: utf-8 -*- #提取电压任务 在返回的图片上截取出液晶屏幕的大小尺寸 __author__ = '上海色宁' import os import sys import cv2 import numpy as np import datetime def task_init_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]) digits = [] def get_most_simmilar_digit(target_img): source = [] img_gray = cv2.cvtColor(target_img, cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(img_gray,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU) #循环对比模板的图片 if len(digits) <10: task_init_load_digits() for digitROI in digits: # 进行模板匹配 #print(digitROI[0].shape) res = cv2.matchTemplate(binary, digitROI[0], cv2.TM_CCOEFF_NORMED) max_val = cv2.minMaxLoc(res)[1] source.append(max_val) #print(source) if max(source) > 0.5 : return digits[source.index(max(source))][1] else: return "-" #截取的摄像头的屏幕的大小,需要换成现场的大小 clip_rect = '175:235,275:420' rows = clip_rect.split(',')[0] # 行 cols = clip_rect.split(',')[1] # 列 rows_start = int(rows.split(':')[0]) rows_end = int(rows.split(':')[1]) cols_start = int(cols.split(':')[0]) cols_end = int(cols.split(':')[1]) totol_cols = (cols_end-cols_start) col_length_1 = int(totol_cols*0.212352113) col_length_2 = int(totol_cols*0.212352113) col_length_3_4 = int(totol_cols*0.212352113) col_start_2 = cols_start+int(totol_cols*0.265690141) col_start_3 = cols_start+int(totol_cols*0.485746479) col_start_4 = cols_start+int(totol_cols*0.75943662) def get_most_digitals_and_image(image_frame): digit_1 = get_most_simmilar_digit(image_frame[rows_start:rows_end,cols_start:cols_start+col_length_1]) digit_2 = get_most_simmilar_digit(image_frame[rows_start:rows_end,col_start_2:col_start_2+col_length_2]) digit_3 = get_most_simmilar_digit(image_frame[rows_start:rows_end,col_start_3:col_start_3+col_length_3_4]) digit_4 = get_most_simmilar_digit(image_frame[rows_start:rows_end,col_start_4:col_start_4+col_length_3_4]) addtext ='' return_digital = 0 if digit_1 == '-': addtext= str(digit_2)+"."+str(digit_3)+str(digit_4) return_digital=int(digit_2)+0.1*int(digit_3)+0.01*int(digit_4) else: addtext= str(digit_1)+str(digit_2)+"."+str(digit_3)+str(digit_4) return_digital=10*int(digit_1)+int(digit_2)+0.1*int(digit_3)+0.01*int(digit_4) cv2.putText(image_frame, addtext, (320, 150), cv2.FONT_HERSHEY_COMPLEX, 1.5, (100, 200, 200), 5) return return_digital,image_frame #测试入口 ''' if __name__ == '__main__': img = cv2.imread("old__frame_2021-06-25-13-56-13.jpg") return_digital,image_frame = get_most_digitals_and_image(img) print(return_digital) cv2.imwrite('image_frameimage_frameimage_frame.jpg',image_frame) '''