Compare commits

..

No commits in common. 'dev_lsy' and 'main' have entirely different histories.

@ -91,9 +91,6 @@ private:
// 预处理 字符检测
int preDet_ZF(const cv::Mat &L255CutImg, std::shared_ptr<ImageAllResult> L255);
// 预处理 标签检测
int preDet_BQ(const cv::Mat &L255CutImg, std::shared_ptr<ImageAllResult> L255);
// 边缘处理
int ImgEdge(cv::Mat img, cv::Mat &detMaskImg, cv::Rect &roi, int productIdx);

@ -340,13 +340,6 @@ struct ZF_Result
std::vector<cv::Rect> pZF_roiList; // 字符的区域
std::vector<cv::Point> ZF_centerPoint; // 字符的中心点位置
};
struct BQ_Result
{
int nresult = 1;
bool bShield_BQ = false; // 是否屏蔽标签
std::vector<cv::Rect> pBQ_roiList; // 标签的区域
std::vector<cv::Point> BQ_centerPoint; // 标签的中心点位置
};
struct CameraBaseResult
{
enum ImageDet_Status
@ -359,7 +352,6 @@ struct CameraBaseResult
std::shared_ptr<EdgeDetResult> pEdgeDetResult; // 边缘检测结果
std::shared_ptr<MakeLine_Result> pMarkLineResult; // MarkLine检测结果
std::shared_ptr<ZF_Result> pZF_Result; // zf 检测结果
std::shared_ptr<BQ_Result> pBQ_Result; // bq 检测结果
ImageDet_Status UpImg_Status = ImageDet_Status_None; // Up 画面
ImageDet_Status DPImg_Status = ImageDet_Status_None; // DP 画面
@ -416,7 +408,6 @@ struct ImageDetResult
int Yx_result; // 异显检测状态
float fUP_IOU; // UP 画面 使用的 iou
std::shared_ptr<std::vector<cv::Rect>> pZF_roiList; // 字符的区域
std::shared_ptr<std::vector<cv::Rect>> pBQ_roiList; // 标签的区域
std::shared_ptr<One_Image_CheckResult_> pOneImgDetResult; // 单图检测结果
std::shared_ptr<CheckResult> pBaseImgCheckResult;
ImageDetResult()

@ -157,13 +157,6 @@ int CameraCheckAnalysisy::Detect_Pre()
}
long te = CheckUtil::getcurTime();
m_pdetlog->AddCheckstr(PrintLevel_0, "Detect_Pre", "==================End time %ld ms ", te - ts);
re = preDet_BQ(L255CutImg, L255);
if (re != 0)
{
m_pdetlog->AddCheckstr(PrintLevel_1, "Detect_Pre", "%s --preDet_BQ error ", strBasic.c_str());
}
// getchar();
// return 1;
@ -571,40 +564,6 @@ int CameraCheckAnalysisy::Det_MarkLine(const cv::Mat &L255CutImg, std::shared_pt
return 0;
}
int BQ_Det(cv::Mat detimg, shared_ptr<BQ_Result> pBQ_Result)
{
cv::resize(detimg, detimg, cv::Size(), 0.1, 0.1);
cv::Mat detimg_bin;
cv::GaussianBlur(detimg, detimg, cv::Size(3, 3), 0);
cv::threshold(detimg, detimg_bin, 25, 255, cv::THRESH_BINARY_INV);
vector<vector<Point>> contours;
cv::Rect result_roi;
findContours(detimg_bin, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 找到最大轮廓
double max_area = 0;
int max_contour_index = 0;
for (int i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area > max_area)
{
max_area = area;
max_contour_index = i;
}
}
if (max_contour_index < 0)
{
cerr << "No contours found!" << endl;
return 7;
}
cv::Rect r_rect = boundingRect(contours[max_contour_index]);
cv::Rect rect(r_rect.x*10, r_rect.y*10, r_rect.width*10, r_rect.height*10);
if (max_contour_index >= 0)
{
pBQ_Result->pBQ_roiList.push_back(rect);
}
return 0;
}
int CameraCheckAnalysisy::preDet_ZF(const cv::Mat &L255CutImg, std::shared_ptr<ImageAllResult> L255)
{
long ts = CheckUtil::getcurTime();
@ -678,65 +637,6 @@ int CameraCheckAnalysisy::preDet_ZF(const cv::Mat &L255CutImg, std::shared_ptr<I
m_pdetlog->AddCheckstr(PrintLevel_1, "preDet_ZF", "==================End zf num %ld re = %d time %ld ms ", m_pCheck_Result->cameraBaseResult->pZF_Result->pZF_roiList.size(), re, te - ts);
return 0;
}
int CameraCheckAnalysisy::preDet_BQ(const cv::Mat &L255CutImg, std::shared_ptr<ImageAllResult> L255)
{
long ts = CheckUtil::getcurTime();
m_pCheck_Result->cameraBaseResult->pBQ_Result = std::make_shared<BQ_Result>();
m_pCheck_Result->cameraBaseResult->pBQ_Result->bShield_BQ = m_AnalysisyConfig.commonCheckConfig.baseConfig.bShield_BQ;
cv::Rect Det_CropRoi = m_pCheck_Result->cameraBaseResult->pEdgeDetResult->cutRoi;
cv::Mat detimg = L255CutImg;
int re = BQ_Det(detimg, m_pCheck_Result->cameraBaseResult->pBQ_Result);
// 屏蔽标签
{
m_pdetlog->AddCheckstr(PrintLevel_2, "preDet_BQ", "shieldBQ is Open");
cv::Mat detImg_mask = m_pCheck_Result->cameraBaseResult->pEdgeDetResult->shieldMask;
for (int i = 0; i < m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.size(); i++)
{
cv::Rect boundingRect = m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.at(i);
boundingRect.x -= 50;
boundingRect.y -= 50;
boundingRect.width += 100;
boundingRect.height += 100;
if(CheckUtil::JudgRect(boundingRect, detimg.cols, detimg.rows))
detImg_mask(boundingRect).setTo(255);
else
m_pdetlog->AddCheckstr(PrintLevel_2, "preDet_BQ", "detImg_mask fail !!!");
// cv::imwrite("BQ_sheildImg.png", m_pCheck_Result->cameraBaseResult->pEdgeDetResult->shieldMask);
}
if (L255->result->in_shareImage->bDebugsaveImg)
{
// cv::imwrite("sheildImg.png", m_pCheck_Result->cameraBaseResult->pEdgeDetResult->shieldMask);
}
}
std::shared_ptr<BQ_Result> pBQ_Result = m_pCheck_Result->cameraBaseResult->pBQ_Result; // BQ 检测结果
pBQ_Result->BQ_centerPoint.erase(pBQ_Result->BQ_centerPoint.begin(), pBQ_Result->BQ_centerPoint.end());
for (int i = 0; i < pBQ_Result->pBQ_roiList.size(); i++)
{
// 获取当前轮廓的边界矩形
cv::Rect boundingRect = pBQ_Result->pBQ_roiList.at(i);
cv::Point p;
p.x = boundingRect.x + boundingRect.width * 0.5f;
p.y = boundingRect.y + boundingRect.height * 0.5f;
// printf("--- bq %d %d %d %d \n", boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height);
pBQ_Result->BQ_centerPoint.push_back(p);
}
if (L255->result->in_shareImage->bDebugsaveImg)
{
cv::Mat showimg = detimg.clone();
for (int i = 0; i < m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.size(); i++)
{
cv::Rect boundingRect = m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.at(i);
cv::rectangle(showimg, boundingRect, cv::Scalar(200), 5);
}
cv::imwrite("bq_result.png", showimg);
}
m_pCheck_Result->cameraBaseResult->pBQ_Result->nresult = 0;
long te = CheckUtil::getcurTime();
m_pdetlog->AddCheckstr(PrintLevel_1, "preDet_BQ", "==================End bq num %ld re = %d time %ld ms ", m_pCheck_Result->cameraBaseResult->pBQ_Result->pBQ_roiList.size(), re, te - ts);
return 0;
}
int CameraCheckAnalysisy::Init(std::string strcameraName)
{
m_strcameraName = strcameraName;

@ -1274,6 +1274,7 @@ int ImageResultJudge::ConfigTypeToResultType(int nconfigType)
// 如果描述没有配置,用默认值
if(!bdesc)
{
int resultError_type = ERROR_TYPE_OK;
switch (nconfigType)
{
case CONFIG_QX_NAME_ok_yisi:

@ -174,10 +174,6 @@ enum IMG_CHANNEL_
IMG_CHANNEL_WTB,
IMG_CHANNEL_TBW,
IMG_CHANNEL_L0,
IMG_CHANNEL_RGBHGRAY,
IMG_CHANNEL_SCANR,
IMG_CHANNEL_SCANG,
IMG_CHANNEL_SCANB,
IMG_CHANNEL_Count,
};
// 缺陷项对应在参数中的名称
@ -201,12 +197,7 @@ static const std::string IMG_CHANNEL_NAME[] =
"BTW",
"WTB",
"TBW",
"L0",
"RGB-HGRAY",
"SCANR",
"SCANG",
"SCANB"
};
"L0"};
// 分析类型
enum ANALYSIS_TYPE_
{
@ -443,7 +434,6 @@ struct BasicConfig
int height_max; // 20231122xls-add
bool bDrawShieldRoi; // 绘制屏蔽区域
bool bShield_ZF; // 屏蔽字符区域,不检测
bool bShield_BQ; // 屏蔽标签区域,不检测
bool bDrawPreRoi; // 绘制弱化区域
float fUP_IOU;
bool bCal_ImageScale; // 是否自动计算成像精度

@ -9,7 +9,7 @@ namespace
{
constexpr const char *LEFT_DIR_NAME = "left";
constexpr const char *RIGHT_DIR_NAME = "right";
constexpr const char *PRODUCT_DIR_PREFIX = "";
constexpr const char *PRODUCT_DIR_PREFIX = "__DB__";
}
// 静态成员定义
@ -134,7 +134,6 @@ std::string LoadImage::GetInfo(const std::string &str)
std::string LoadImage::extractProductId(const std::string &dir_name)
{
// 检查是否以 "__DB__" 开头
if(PRODUCT_DIR_PREFIX == "") return dir_name;
if (dir_name.find(PRODUCT_DIR_PREFIX) == 0)
{
// 跳过前缀,返回剩余部分作为产品 ID
@ -159,20 +158,18 @@ std::string LoadImage::extractChannelName(const std::string &filename)
name = name.substr(0, ext_pos);
}
// Step 2: 优先尝试用 '^' 分隔符提取(如 "img_01^CH1^Org" -> "CH1"
size_t last_sep_pos = name.rfind('^');
size_t sep_pos = name.rfind('^', last_sep_pos - 1);
// Step 2: 优先尝试用 '^' 分隔符提取(如 "img_01^CH1" -> "CH1"
size_t sep_pos = name.rfind('^');
if (sep_pos != std::string::npos && sep_pos < name.length() - 1)
{
return name.substr(sep_pos + 1, last_sep_pos - sep_pos - 1);
return name.substr(sep_pos + 1);
}
// Step 3: 其次尝试用 '_' 分隔符提取(如 "img_01_CH1_Org" -> "CH1"
size_t last_under_pos = name.rfind('_');
size_t under_pos = name.rfind('_', last_under_pos - 1);
// Step 3: 其次尝试用 '_' 分隔符提取(如 "img_01_CH1" -> "CH1"
size_t under_pos = name.rfind('_');
if (under_pos != std::string::npos && under_pos < name.length() - 1)
{
return name.substr(under_pos + 1, last_under_pos - under_pos - 1);
return name.substr(under_pos + 1);
}
// Step 4: 如果没有分隔符,返回整个文件名(不含扩展名)

Loading…
Cancel
Save