添加LPV图像绘制和读入

master
zhou.mengjia 2 years ago
parent 2ee33b7efc
commit 952bce1b85

Binary file not shown.

@ -105,6 +105,13 @@ bool CategoryMatcher::smokeMatch(const QString& typeNo, const ILImagePtr ilImgPt
{
TemplateObject templateObj;
QString templateImgFolderPath = TYPE_TEMPLATE_PATH;
//可能存在问题:之前的模板设计。后缀带了别的数据。需验证
// 模板文件格式:烟箱编码/烟箱编码-模板编码
// 模板编码:模板类型+模板编号
// 模板类型1为大模板模板和匹配图均放缩50%2为小模板
// 例如1类模板的第1个模板11
// 中华硬310102的2类模板的第1个模板310102-21
QString folderPath = QString("%1\\%2").arg(templateImgFolderPath).arg(typeNo);
if (getTemplateImgFileInfo(folderPath, templateObj))
{
@ -249,18 +256,26 @@ bool CategoryMatcher::getTemplateImgFileInfo(const QString& folderPath, Template
|| fileName.endsWith(".jpg") || fileName.endsWith(".JPG"))
{
QStringList strList = imgFileInfo.baseName().split("_");
if (strList.first() == "template" && strList.length() == 3)
{
int scoreThresh = strList.last().toInt();
QString templateImgPath = imgFileInfo.filePath(); //相对路径,避免路径存在中文时读取失败
std::pair<QString, int> imgScorePair(templateImgPath, scoreThresh);
QString serialNum = strList[1];
if (serialNum.length() == 4)
{
int level = serialNum.mid(0, 2).toInt();
templateObject[level].insert(templateImgPath, scoreThresh);
}
}
QString templateImgPath = imgFileInfo.filePath(); //相对路径,避免路径存在中文时读取失败
int level = strList.last().mid(0, 1).toInt();
templateObject[level].insert(templateImgPath, 70);
////之前的模板格式例如templateImg/51520312/template_0101_65
//if (strList.first() == "template" && strList.length() == 3)
//{
// int scoreThresh = strList.last().toInt();
// QString templateImgPath = imgFileInfo.filePath(); //相对路径,避免路径存在中文时读取失败
// std::pair<QString, int> imgScorePair(templateImgPath, scoreThresh);
// QString serialNum = strList[1];
// if (serialNum.length() == 4)
// {
// int level = serialNum.mid(0, 2).toInt();
// templateObject[level].insert(templateImgPath, scoreThresh);
// }
//}
}
}
if (templateObject.isEmpty())
@ -280,10 +295,39 @@ void CategoryMatcher::drawImage(ILImagePtr image, std::pair<int, QVector<ILMatch
int level = 1;
int templateLevel = templateLevelAndvecMatchRltPtr.first;
//在Display上绘制图像+结果
QVector<ILMatchResultPtr> vecMatchRlts = templateLevelAndvecMatchRltPtr.second;
QString rltStr;
cv::Scalar textColor(0, 255, 0);
if (!vecMatchRlts.isEmpty() && (vecMatchRlts.length() == templateLevel))
{
rltStr = QString("Match successful! Total level: %1").arg(templateLevel);
}
else
{
textColor = cv::Scalar(0, 0, 255);
rltStr = QString("Match failed! Total level: %1").arg(templateLevel);
}
//在Display上绘制图像+结果
m_display->SetImage(image);
m_display->AddObject(rltStr,0);
rltStr.clear();
for each(ILMatchResultPtr matchRltPtr in vecMatchRlts)
{
// 存在问题如果不存在1级模板直接是2级模板
double score = matchRltPtr->GetScore();
rltStr.append(QString(" Level %1 score: %2").arg(level++).arg(score));
//存在的问题——大模板的时候匹配的得到的结果是放缩后的结果,需要对位置进行扩大
m_display->AddObject(matchRltPtr, LPVPatDrawFlags::LPVPatDrawBoundingRect | LPVPatDrawFlags::LPVPatDrawCenter);
}
if (!rltStr.isEmpty())
{
m_display->AddObject(rltStr, 0);
}
}
void CategoryMatcher::saveResultsImage(const QString& filePath)

@ -28,6 +28,7 @@
typedef QMap<int, QMap<QString, int> > TemplateObject; //<Level, <templateImgPath, MatchScoreThresh>>
// 目前匹配分数是固定的但保留int字节为后续扩展——例如图像匹配放缩比等
struct MatchParam
{

Loading…
Cancel
Save