You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
6.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "algEg.h"
#include "CaliValve.h"
#include "qtcvutils.h"
using namespace luffy_base;
#pragma execution_character_set("utf-8")
algEg::algEg()
{
luffy_triangle::createNewTrigValue(360);
}
algEg::~algEg()
{
}
bool algEg::Exec(IDetectorTask *lpTask, IDetectorAlgorithm* lpAlgorithm)
{
qDebug() << "start cali valve";
//<! detect
CaliValve m_objDetect;
InputParam paramInput;
OutputParam paramOutput;
int nID = lpTask->GetTaskInfo()->nCameraID;
QString strObj = lpTask->GetTaskInfo()->strName;
if (strObj.isEmpty()) {
qWarning() << "cali valve, obj is empty";
return false;
}
paramInput.valueROI = lpAlgorithm->GetParamValue("ROI", LP_ROI).value<LP_DETECTOR_ROI_DATA>();
paramInput.barROI = lpAlgorithm->GetParamValue("barROI", LP_ROI).value<LP_DETECTOR_ROI_DATA>();
paramInput.startROI = lpAlgorithm->GetParamValue("StartROI", LP_ROI).value<LP_DETECTOR_ROI_DATA>();
paramInput.barNum = lpAlgorithm->GetParamValue("barNum", LP_INT).toInt();
paramInput.flagCircle = lpAlgorithm->GetParamValue("flagCircle", LP_INT).toInt();
paramInput.backgroundThresh = lpAlgorithm->GetParamValue("backgroundThresh", LP_INT).toInt();
paramInput.ifClasify = lpAlgorithm->GetParamValue("ifClasify", LP_INT).toInt();
paramInput.ibackground = lpAlgorithm->GetParamValue("ibackground", LP_INT).toInt();
QPointF pt = lpAlgorithm->GetParamValue("center", LP_POINTF).toPointF();
paramInput.ptCenter = Point2f(pt.x(), pt.y());
if (pt.x()==0 || pt.y() == 0) {
qWarning() << "cali valve, center is zero";
}
Mat mask;Mat gray;
if (!lpTask->GetTaskInfo()->detectImg.empty()) {
luffy_imageProc::createImage(lpTask->GetTaskInfo()->detectImg, gray, luffy_imageProc::emCreateGray);
}
// else {
// luffy_imageProc::createImage(paramInput.roi.img, gray, luffy_imageProc::emCreateGray);
// }
if (gray.empty()) {
qWarning() << "cali valve, gray is empty";
return false;
}
if (gray.size() != paramInput.valueROI.img.size())
{
qWarning() << "img size not compare";
return false;
}
if (paramInput.ibackground == 1)
{
QString str = qApp->applicationDirPath() + QString("\\backGround\\%1.BMP").arg(nID);//imread("E:\\1.BMP");
if (str.isEmpty())
{
qDebug() << "cali valve : cannot background dir ";
return false;
}
else
{
std::string starName = str.toLocal8Bit().toStdString();
paramOutput.background = imread(starName, 0);
}
if (paramOutput.background.empty())
{
qDebug() << "cali valve : background image is empty";
}
}
luffy_imageProc::createImage(gray, mask, luffy_imageProc::emCreateColor);
m_objDetect.detect(gray, paramInput, paramOutput, mask);
QVariant img, barImg, baseImg, weightMat, backgroundImage;
img.setValue(paramOutput.imgTemplate);
barImg.setValue(paramOutput.barTemplate);
baseImg.setValue(paramOutput.baseImage);
weightMat.setValue(paramOutput.weightMat);
backgroundImage.setValue(paramOutput.background);
lpAlgorithm->SetOutParamValue("valveTemplate", img);
lpAlgorithm->SetOutParamValue("image", lp::QtCVUtils::cvMatToQImage(mask));
lpAlgorithm->SetOutParamValue("center", pt);
lpAlgorithm->SetOutParamValue("valveDis", paramOutput.fValveDis);
lpAlgorithm->SetOutParamValue("startDis", paramOutput.fStartDis);
lpAlgorithm->SetOutParamValue("valveWidth", paramOutput.fValveWidth);
lpAlgorithm->SetOutParamValue("valveOffset", paramOutput.nValveOffset);
lpAlgorithm->SetOutParamValue("startOffset", paramOutput.nStartOffset);
lpAlgorithm->SetOutParamValue("barTemplate", barImg);
lpAlgorithm->SetOutParamValue("withinOffset", paramOutput.withinOffset);
lpAlgorithm->SetOutParamValue("barNum", paramInput.barNum);
lpAlgorithm->SetOutParamValue("flagCircle", paramInput.flagCircle);
lpAlgorithm->SetOutParamValue("baseImage", baseImg);
lpAlgorithm->SetOutParamValue("weightMat", weightMat);
lpAlgorithm->SetOutParamValue("backgroundThresh", paramInput.backgroundThresh);
lpAlgorithm->SetOutParamValue("background", backgroundImage);
qDebug() << "finish cali valve";
return true;
}
bool algEg::Init(IDetectorTask *lpTask, IDetectorAlgorithm* lpAlgorithm)
{
LP_ALGORITHM_PARAM param1("center", LP_POINTF, QVariant(), QObject::tr("轮毂中心坐标,绑定圆心定位"));
lpAlgorithm->AddParam(&param1, 1);
LP_ALGORITHM_PARAM param2("ROI", LP_ROI, QVariant(), QObject::tr("气门芯模板"));
lpAlgorithm->AddParam(&param2, 1);
LP_ALGORITHM_PARAM param3("barROI", LP_ROI, QVariant(), QObject::tr("辐条模板"));
lpAlgorithm->AddParam(&param3, 1);
LP_ALGORITHM_PARAM param_StartROI("StartROI", LP_ROI, QVariant(), QObject::tr("参考线模板"));
lpAlgorithm->AddParam(&param_StartROI, 1);
LP_ALGORITHM_PARAM param4("flagCircle", LP_INT, 0, QObject::tr("无气门芯识别"));
lpAlgorithm->AddParam(&param4, 1);
LP_ALGORITHM_PARAM param5("backgroundThresh", LP_INT, 15, QObject::tr("背景剪除阈值"));
lpAlgorithm->AddParam(&param5, 1);
LP_ALGORITHM_PARAM param6("ifClasify", LP_INT, 0, QObject::tr("型号判定0关闭1打开"));
lpAlgorithm->AddParam(&param6, 1);
LP_ALGORITHM_PARAM param61("ibackground", LP_INT, 0, QObject::tr("背景图启用0关闭1打开"));
lpAlgorithm->AddParam(&param61, 1);
LP_ALGORITHM_PARAM param7("barNum", LP_INT, 0, QObject::tr("辐条数量"));
lpAlgorithm->AddParam(&param7, 1);
LP_ALGORITHM_PARAM param8("center", LP_POINTF);
lpAlgorithm->AddOutParam(&param8, 1);
LP_ALGORITHM_PARAM param9("image", LP_IMAGE);
lpAlgorithm->AddOutParam(&param9, 1);
LP_ALGORITHM_PARAM param10("valveDis", LP_DOUBLE);
lpAlgorithm->AddOutParam(&param10, 1);
LP_ALGORITHM_PARAM param11("valveWidth", LP_DOUBLE);
lpAlgorithm->AddOutParam(&param11, 1);
LP_ALGORITHM_PARAM param12("valveOffset", LP_INT);
lpAlgorithm->AddOutParam(&param12, 1);
LP_ALGORITHM_PARAM param13("valveTemplate", LP_MAT);//气门芯模板
lpAlgorithm->AddOutParam(&param13, 1);
LP_ALGORITHM_PARAM param14("barTemplate", LP_MAT);//辐条模板
lpAlgorithm->AddOutParam(&param14, 1);
LP_ALGORITHM_PARAM param15("withinOffset", LP_INT);
lpAlgorithm->AddOutParam(&param15, 1);
LP_ALGORITHM_PARAM param16("barNum", LP_INT);
lpAlgorithm->AddOutParam(&param16, 1);
LP_ALGORITHM_PARAM param17("flagCircle", LP_INT);
lpAlgorithm->AddOutParam(&param17, 1);
LP_ALGORITHM_PARAM param18("baseImage", LP_MAT);
lpAlgorithm->AddOutParam(&param18, 1);
LP_ALGORITHM_PARAM param19("weightMat", LP_MAT);
lpAlgorithm->AddOutParam(&param19, 1);
LP_ALGORITHM_PARAM param20("backgroundThresh", LP_INT);
lpAlgorithm->AddOutParam(&param20, 1);
LP_ALGORITHM_PARAM param21("background", LP_MAT);
lpAlgorithm->AddOutParam(&param21, 1);
LP_ALGORITHM_PARAM param_startOffset("startOffset", LP_INT, 0, QObject::tr(" "));//标定点距离0轴坐标系的角度
lpAlgorithm->AddOutParam(&param_startOffset, 1);
LP_ALGORITHM_PARAM param_startDis("startDis", LP_DOUBLE);//标定点距离圆心的距离
lpAlgorithm->AddOutParam(&param_startDis, 1);
return true;
}
void LpAlgoNewInstance(IAlgo** lppAlgo)
{
*lppAlgo = (IAlgo*)new algEg();
}
bool LpAlgoDeleteInstance()
{
return true;
}