diff --git a/detect_tools.py b/detect_tools.py new file mode 100644 index 0000000..74265fe --- /dev/null +++ b/detect_tools.py @@ -0,0 +1,91 @@ +# encoding:utf-8 +import cv2 +from PyQt5.QtGui import QPixmap, QImage +import numpy as np +from PIL import Image,ImageDraw,ImageFont +import csv +import os + +# fontC = ImageFont.truetype("Font/platech.ttf", 20, 0) + +# 绘图展示 +def cv_show(name,img): + cv2.imshow(name, img) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +def drawRectBox(image, rect, addText, fontC, color=(0,0,255)): + """ + 绘制矩形框与结果 + :param image: 原始图像 + :param rect: 矩形框坐标, int类型 + :param addText: 类别名称 + :param fontC: 字体 + :return: + """ + # 绘制位置方框 + cv2.rectangle(image, (rect[0], rect[1]), + (rect[2], rect[3]), + color, 2) + + # 绘制字体背景框 + # cv2.rectangle(image, (rect[0] - 1, rect[1] - 50), (rect[2], rect[1]), color, -1, cv2.LINE_AA) + # 图片 添加的文字 位置 字体 字体大小 字体颜色 字体粗细.无法正常显示中文 + # cv2.putText(image, addText, (int(rect[0])+2, int(rect[1])-3), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 2) + + # 可以显示中文 + # 字体自适应大小 + font_size = int((rect[3]-rect[1])/1.5) + fontC = ImageFont.truetype("Fonts/msyhbd.ttc", font_size, 0) + img = Image.fromarray(image) + draw = ImageDraw.Draw(img) + draw.text((rect[0]+2, rect[1]-font_size), addText, (0, 0, 255), font=fontC) + imagex = np.array(img) + return imagex + + +def img_cvread(path): + # 读取含中文名的图片文件 + # img = cv2.imread(path) + img = cv2.imdecode(np.fromfile(path, dtype=np.uint8), cv2.IMREAD_COLOR) + return img + + +def draw_boxes(img, boxes): + for each in boxes: + x1 = each[0] + y1 = each[1] + x2 = each[2] + y2 = each[3] + cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) + return img + + + +def cvimg_to_qpiximg(cvimg): + height, width, depth = cvimg.shape + cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB) + qimg = QImage(cvimg.data, width, height, width * depth, QImage.Format_RGB888) + qpix_img = QPixmap(qimg) + return qpix_img + + + + +# 图片上显示中文 +def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=50): + if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型 + img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) + # 创建一个可以在给定图像上绘图的对象 + draw = ImageDraw.Draw(img) + # 字体的格式 + fontStyle = ImageFont.truetype( + "simsun.ttc", textSize, encoding="utf-8") + # 绘制文本 + draw.text(position, text, textColor, font=fontStyle) + # 转换回OpenCV格式 + return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) + + +