detect-gui/util/imgProcess.py
2024-11-25 11:58:46 +08:00

114 lines
4.3 KiB
Python

# -- coding: utf-8 --
import os
import threading
from ctypes import *
import numpy as np
from PyQt5.QtCore import QObject, pyqtSignal
from dynaconf.base import Settings
from numpy.ctypeslib import as_array
import platform
import time
import cv2
TO_CLIENT_NOTIFY_BASE = 1000
def process(msg):
record = msg.record
if record.code == (6 + TO_CLIENT_NOTIFY_BASE):
return doLocationProcessing(msg)
elif record.code == (2 + TO_CLIENT_NOTIFY_BASE) or record.code == (12 + TO_CLIENT_NOTIFY_BASE):
return doDetectionProcessing(msg)
else : pass
return msg
# 处理图像
def doLocationProcessing(msg):
if msg is None:
return msg
im = msg.im2D
record = msg.record
print("-------------------- record.roi_size" + str(record.roi_size))
ptsRoiPoints = None
ptsInnerConners = None
ptsInnerConners3D = None
for i in range(record.roi_size):
roi = record.subRois[i]
roiPoints = roi.mRoiPoints
innerConners = roi.mInnerConners
innerConners3D = roi.mInnerConners3D
ptsRoiPoints = np.array([
[roiPoints[0],roiPoints[1]],
[roiPoints[2],roiPoints[3]],
[roiPoints[4],roiPoints[5]],
[roiPoints[6],roiPoints[7]]], dtype=np.int32)
ptsInnerConners = np.array([
[innerConners[0],innerConners[1]],
[innerConners[2],innerConners[3]],
[innerConners[4],innerConners[5]],
[innerConners[6],innerConners[7]]], dtype=np.int32)
ptsInnerConners3D = np.array([
[innerConners3D[0],innerConners3D[1],innerConners3D[2]],
[innerConners3D[3],innerConners3D[4],innerConners3D[5]],
[innerConners3D[6],innerConners3D[7],innerConners3D[8]],
[innerConners3D[9],innerConners3D[10],innerConners3D[11]]])
cv2.polylines(im, [ptsRoiPoints], True, (0,255,0) , 2)
cv2.polylines(im, [ptsInnerConners], True, (0,255,0) , 2)
# for i in range(4):
# ptsRoiPoints[i][0] = int(ptsRoiPoints[i][0] / 16)
# ptsRoiPoints[i][1] = int(ptsRoiPoints[i][1] / 16)
# ptsInnerConners[i][0]= int(ptsInnerConners[i][0] / 16)
# ptsInnerConners[i][1] = int(ptsInnerConners[i][1] / 16)
# cv2.polylines(im, [ptsRoiPoints], True, (0,255,0) , 2)
# cv2.polylines(im, [ptsInnerConners], True, (0,255,0) , 2)
# cv2.imshow("HQImage", msg.im2D)
# cv2.waitKey(1)
return msg
def doDetectionProcessing(msg):
if msg is None:
return msg
if msg.im2D is not None:
im = cv2.resize(msg.im2D, (int(msg.im2D.shape[1]/16), int(msg.im2D.shape[0]/16)))
record = msg.record
ptsRoiPoints = None
ptsInnerConners = None
ptsInnerConners3D = None
for i in range(record.roi_size):
roi = record.subRois[i]
roiPoints = roi.mRoiPoints
innerConners = roi.mInnerConners
innerConners3D = roi.mInnerConners3D
ptsRoiPoints = np.array([
[roiPoints[0],roiPoints[1]],
[roiPoints[2],roiPoints[3]],
[roiPoints[4],roiPoints[5]],
[roiPoints[6],roiPoints[7]]], dtype=np.int32)
ptsInnerConners = np.array([
[innerConners[0],innerConners[1]],
[innerConners[2],innerConners[3]],
[innerConners[4],innerConners[5]],
[innerConners[6],innerConners[7]]], dtype=np.int32)
ptsInnerConners3D = np.array([
[innerConners3D[0],innerConners3D[1],innerConners3D[2]],
[innerConners3D[3],innerConners3D[4],innerConners3D[5]],
[innerConners3D[6],innerConners3D[7],innerConners3D[8]],
[innerConners3D[9],innerConners3D[10],innerConners3D[11]]])
for i in range(4):
ptsRoiPoints[i][0] = int(ptsRoiPoints[i][0] / 16)
ptsRoiPoints[i][1] = int(ptsRoiPoints[i][1] / 16)
ptsInnerConners[i][0]= int(ptsInnerConners[i][0] / 16)
ptsInnerConners[i][1] = int(ptsInnerConners[i][1] / 16)
cv2.polylines(im, [ptsRoiPoints], True, (0,255,0) , 2)
cv2.polylines(im, [ptsInnerConners], True, (0,255,0) , 2)
# cv2.imshow("HQImage", im)
# cv2.waitKey(1)
return msg