图像转换跳过黑白图、图像保存用LPV

master
zhou.mengjia 2 years ago
parent 139b1da839
commit 2ee33b7efc

@ -8,3 +8,20 @@ Identify the types and quantities of smoke boxes
SmokeBoxIdentification.cpp中根据STOCK_CHECK_HEAD等关键词选择哪个相机进行拍照。
所以需要跟通讯对一下,什么信号可以说明是哪个方向的相机进行拍摄。
之前是captureSide和captureTop顶部和侧面拍摄。
相机载入的时候,读入矫正文件:
m_calib->Load(strFileName.toStdString().c_str());
图片矫正:
m_calib->FixImage(m_imgOrigin, m_imgFixed);

@ -6,6 +6,7 @@ CategoryMatcher::CategoryMatcher(QObject *parent)
{ {
m_ilmatch = ILMatchPtr(__uuidof(LMatch)); m_ilmatch = ILMatchPtr(__uuidof(LMatch));
m_ilmatchF = ILMatchPtr(__uuidof(LMatch)); m_ilmatchF = ILMatchPtr(__uuidof(LMatch));
m_display = ILDisplayPtr(__uuidof(LDisplay));
initILMatchParam(QCoreApplication::applicationDirPath() + MATCHER_CONFIG); initILMatchParam(QCoreApplication::applicationDirPath() + MATCHER_CONFIG);
setILMatch(m_matchParam); setILMatch(m_matchParam);
qDebug() << "init CategoryMatcher successed"; qDebug() << "init CategoryMatcher successed";
@ -72,6 +73,14 @@ void CategoryMatcher::setILMatch(const MatchParam& matchParam)
} }
bool CategoryMatcher::smokeMatch(const QString& typeNo, ILImagePtr image)
{
std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr;
bool bRlt = smokeMatch(typeNo, image, templateLevelAndvecMatchRltPtr);
drawImage(image, templateLevelAndvecMatchRltPtr);
return bRlt;
}
bool CategoryMatcher::smokeMatch(const QString& typeNo, const cv::Mat& inputMat, cv::Mat& rltMat) bool CategoryMatcher::smokeMatch(const QString& typeNo, const cv::Mat& inputMat, cv::Mat& rltMat)
{ {
if (inputMat.empty()) if (inputMat.empty())
@ -261,6 +270,28 @@ bool CategoryMatcher::getTemplateImgFileInfo(const QString& folderPath, Template
return true; return true;
} }
void CategoryMatcher::drawImage(ILImagePtr image, std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr)
{
if (image->Height == 0 || image->Width == 0)
{
return;
}
int level = 1;
int templateLevel = templateLevelAndvecMatchRltPtr.first;
//ÔÚDisplayÉÏ»æÖÆÍ¼Ïñ+½á¹û
}
void CategoryMatcher::saveResultsImage(const QString& filePath)
{
std::wstring str = filePath.toStdWString();
m_display->SaveSceneToFile(str.c_str(), 1, 1);
}
void CategoryMatcher::drawImage(const cv::Mat& imgMatSrc, cv::Mat& rltCvImg, void CategoryMatcher::drawImage(const cv::Mat& imgMatSrc, cv::Mat& rltCvImg,
std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr) std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr)
{ {

@ -20,6 +20,8 @@
#include "LPVPat.h" #include "LPVPat.h"
#include "LPVImgProc.h" #include "LPVImgProc.h"
#include "DisplayHelper.h" #include "DisplayHelper.h"
#include "LPVCalib.h"
#include "LPVDisplay.h"
#include "commonDefine.h" #include "commonDefine.h"
@ -51,7 +53,10 @@ class CategoryMatcher : public QObject
public: public:
CategoryMatcher(QObject *parent = nullptr); CategoryMatcher(QObject *parent = nullptr);
~CategoryMatcher(); ~CategoryMatcher();
bool smokeMatch(const QString& typeNo, ILImagePtr image);
void saveResultsImage(const QString& filePath);
bool smokeMatch(const QString& typeNo, const cv::Mat& inputMat, cv::Mat& rltMat); bool smokeMatch(const QString& typeNo, const cv::Mat& inputMat, cv::Mat& rltMat);
//signals: //signals:
// void sgMatchRlt(bool bRlt, cv::Mat imgRltMat); // void sgMatchRlt(bool bRlt, cv::Mat imgRltMat);
private: private:
@ -60,13 +65,19 @@ private:
bool getTemplateImgFileInfo(const QString& folderPath, TemplateObject& templateObject); bool getTemplateImgFileInfo(const QString& folderPath, TemplateObject& templateObject);
bool smokeMatch(const QString& type, const ILImagePtr ilImgPtr, bool smokeMatch(const QString& type, const ILImagePtr ilImgPtr,
std::pair<int, QVector<ILMatchResultPtr> >& templateLevelAndvecMatchRltPtr); std::pair<int, QVector<ILMatchResultPtr> >& templateLevelAndvecMatchRltPtr);
void drawImage(const cv::Mat& imgMatSrc, cv::Mat& resulQImg, void drawImage(const cv::Mat& imgMatSrc, cv::Mat& resulQImg,
std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr); std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr);
void drawImage(ILImagePtr image, std::pair<int, QVector<ILMatchResultPtr>> templateLevelAndvecMatchRltPtr);
MatchParam m_matchParam; MatchParam m_matchParam;
ILMatchPtr m_ilmatch; ILMatchPtr m_ilmatch;
ILMatchPtr m_ilmatchF; ILMatchPtr m_ilmatchF;
ILDisplayPtr m_display;
QMutex m_mutex; QMutex m_mutex;
bool m_bUseTotalThresh{ false };
}; };
bool ensureGrayImg(const cv::Mat& img, cv::Mat& gray); bool ensureGrayImg(const cv::Mat& img, cv::Mat& gray);

@ -222,6 +222,41 @@ Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector<ImageInfo>& ve
cv::Mat imgRltMat; cv::Mat imgRltMat;
QString dataSaveFolder = QString("%1\\%2\\%3").arg(FILE_STORAGE_PATH) QString dataSaveFolder = QString("%1\\%2\\%3").arg(FILE_STORAGE_PATH)
.arg(m_currtStockCheckInfo.stockNum).arg(m_currtStockCheckInfo.taskNum); .arg(m_currtStockCheckInfo.stockNum).arg(m_currtStockCheckInfo.taskNum);
#if IMAGEDRAWING == LPV
for each (const ImageInfo& imgInfo in vecImageInfo)
{
QString str = QString("Camera %1 Match Start ...").arg(imgInfo.cameraSn);
qDebug() << str;
if (!imgInfo.image.empty())
{
ILImagePtr image(__uuidof(LImage));
image->SetImageData(imgInfo.image.cols, imgInfo.image.rows, (void*)imgInfo.image.data, imgInfo.image.step, 0);
if (m_pCategoryMatcher->smokeMatch(typeNum, image))
{
str = QString("Camera %1 Match successful!").arg(imgInfo.cameraSn);
qDebug() << str;
bRlt = true;
FileInfo fileInfo = imgInfo.saveImgInfo;
QString fileName = QString("%1_%2_rlt%3").arg(fileInfo.strId)
.arg(m_currtStockCheckInfo.smokeTypeNum).arg(fileInfo.suffix);
QString filePath = QString("%1\\%2").arg(dataSaveFolder).arg(fileName);
m_pCategoryMatcher->saveResultsImage(filePath);
break;
}
}
else
{
qDebug() << "imgInfo.image is Empty!";
}
}
#elif IMAGEDRAWING == OPENCV
for each (const ImageInfo& imgInfo in vecImageInfo) for each (const ImageInfo& imgInfo in vecImageInfo)
{ {
QString str = QString("Camera %1 Match Start ...").arg(imgInfo.cameraSn); QString str = QString("Camera %1 Match Start ...").arg(imgInfo.cameraSn);
@ -260,6 +295,7 @@ Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector<ImageInfo>& ve
// QImage resultQImg((const unsigned char*)imgRltMat.data, imgRltMat.cols, imgRltMat.rows, imgRltMat.step, QImage::Format_RGB888); // QImage resultQImg((const unsigned char*)imgRltMat.data, imgRltMat.cols, imgRltMat.rows, imgRltMat.step, QImage::Format_RGB888);
// emit sgShowImage(m_pShowRltImgLabel, resultQImg); // emit sgShowImage(m_pShowRltImgLabel, resultQImg);
//} //}
#endif
}); });
} }
} }

@ -23,6 +23,10 @@
#include "QNumTemplateBuild.h" #include "QNumTemplateBuild.h"
#include "ui_SmokeBoxIdentification.h" #include "ui_SmokeBoxIdentification.h"
//#define IMAGEDRAWING OPENCV
#define IMAGEDRAWING LPV
enum MsgType enum MsgType
{ {
EmptyCheckResult = 0, EmptyCheckResult = 0,

@ -0,0 +1,8 @@
#pragma once
// the must-have LPVCoreLib
#import "libid:c34b3e9e-6dea-4aa9-b500-0266f90dc15f" no_namespace
// the must-have LPVGeomLib
#import "libid:8955aafb-4602-4d6a-a888-69d1437c4d2b" no_namespace
// import LPVCalibLib
#import "libid:faa32948-bf4e-4482-9216-70412f34bb66" no_namespace

@ -0,0 +1,7 @@
#pragma once
// the must-have LPVCoreLib
#import "libid:c34b3e9e-6dea-4aa9-b500-0266f90dc15f" no_namespace
// the must-have LPVGeomLib
#import "libid:8955aafb-4602-4d6a-a888-69d1437c4d2b" no_namespace
// import LPVDisplayLib
#import "libid:5b289f4f-ebc9-4a41-bd94-07f4a4e4e5f6" no_namespace
Loading…
Cancel
Save