feat 添加传统检测存图,传统检测区域自适应

dev_lsy
liusiyang 2 weeks ago
parent 444e57a52d
commit 640f121f05

@ -623,6 +623,7 @@ int ImgCheckAnalysisy::Adapt_Config(Mat img, Rect cur_roi, bool b_update){
m_old_cur_markLine_mark1 = m_AnalysisyConfig.baseFunction.markLine.mark_local_1;
m_old_cur_markLine_mark2 = m_AnalysisyConfig.baseFunction.markLine.mark_local_2;
m_old_cur_regionConfigArr = m_AnalysisyConfig.commonCheckConfig.nodeConfigArr[0].regionConfigArr;
m_old_cur_traditional_region = m_AnalysisyConfig.baseFunction.traditionDet.detArea;
}
/*计算old_roi到new_roi的完整仿射变换矩阵(平移+缩放+旋转)*/
@ -660,6 +661,7 @@ int ImgCheckAnalysisy::Adapt_Config(Mat img, Rect cur_roi, bool b_update){
cv::Point& cur_markLine_mark1 = m_AnalysisyConfig.baseFunction.markLine.mark_local_1;
cv::Point& cur_markLine_mark2 = m_AnalysisyConfig.baseFunction.markLine.mark_local_2;
std::vector<RegionConfigST>& cur_regionConfigArr = m_AnalysisyConfig.commonCheckConfig.nodeConfigArr[0].regionConfigArr;
std::vector<cv::Point>& cur_traditional_region = m_AnalysisyConfig.baseFunction.traditionDet.detArea;
// if (img.empty())
// {
@ -717,6 +719,9 @@ int ImgCheckAnalysisy::Adapt_Config(Mat img, Rect cur_roi, bool b_update){
cur_regionConfigArr[i].basicInfo.pointArry[j] = affinePoint(m_old_cur_regionConfigArr[i].basicInfo.pointArry[j]);
}
}
for(int i = 0; i < cur_traditional_region.size(); i++){
cur_traditional_region[i] = affinePoint(m_old_cur_traditional_region[i]);
}
/*show*/
// if (img.empty())
@ -1846,6 +1851,9 @@ int ImgCheckAnalysisy::Traditional_Detect_Thread(const cv::Mat &img, cv::Mat &Re
cp.nFilterHigh = traditionParam.nFilterHigh;
cp.nAreaFilter = traditionParam.nAreaFilter;
cp.nCountFilter = traditionParam.nCountFilter;
cp.productId = DetImgInfo_shareP->strImgProductID;
cp.productChannel = m_strCurDetChannel;
cp.bDebugsaveImg = DetImgInfo_shareP->bsaveProcessImg;
m_tcsCheck.SetChecConfig(&cp);
}

@ -28,6 +28,10 @@ struct CHECK_PARAM{
int nAreaFilter; // blob filter for drawing, only draw blob with area >= nAreaFilter
int nCountFilter; // blob filter for counting, Only the first nCountFilters with areas arranged from largest to smallest
std::string productId; // product id
std::string productChannel; // product channel
bool bDebugsaveImg;
};
/*
>= 3 ?

@ -1,5 +1,26 @@
#include "TcsCheck.h"
namespace {
// 静默递归创建多级目录(成功或已存在返回 true
bool MakeDirs(const std::string& path, mode_t mode = 0755)
{
if (path.empty()) {
return false;
}
if (mkdir(path.c_str(), mode) == 0 || errno == EEXIST) {
return true;
}
const std::size_t pos = path.find_last_of('/');
if (pos == std::string::npos || pos == 0) {
return false;
}
if (!MakeDirs(path.substr(0, pos), mode)) {
return false;
}
return (mkdir(path.c_str(), mode) == 0 || errno == EEXIST);
}
} // namespace
class CLock
{
public:
@ -178,6 +199,18 @@ cv::Mat CTcsCheck::AdaptiveBinary(cv::Mat matBlur)
cv::inRange(block, minGrey, maxGrey, blockBin);
cv::bitwise_not(blockBin, blockBin);
blockBin.copyTo(result(blockRect));
// 传统检测残点图存图
if (m_cpCfg.bDebugsaveImg)
{
std::string roi_ext = "[" + std::to_string(x) + "," + std::to_string(y) + "]";
std::string strSaveDir = "/home/aidlux/BOE/CELL_AOI/AI_Detect/" + m_cpCfg.productId + "/";
MakeDirs(strSaveDir);
std::string strSavePath_in = strSaveDir + m_cpCfg.productChannel +"_"+ roi_ext + "_"+ "in" + ".png";
std::string strSavePath_out = strSaveDir + m_cpCfg.productChannel +"_"+ roi_ext + "_"+ "out" + ".png";
cv::imwrite(strSavePath_in, block);
cv::imwrite(strSavePath_out, blockBin);
}
}
}
return result;

Loading…
Cancel
Save