From 0fbfccf1615a45a2bd2e683dea50fbc0818786a1 Mon Sep 17 00:00:00 2001 From: liusiyang Date: Tue, 1 Sep 2026 14:22:40 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=9B=BE=E7=89=87=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/ALLImgCheckAnalysisy.hpp | 3 ++ AlgorithmModule/src/ALLImgCheckAnalysisy.cpp | 14 +++++++ example/deal.cpp | 42 +++++++++++++++++-- example/deal.h | 1 + 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/AlgorithmModule/include/ALLImgCheckAnalysisy.hpp b/AlgorithmModule/include/ALLImgCheckAnalysisy.hpp index 877c505..a375bc2 100644 --- a/AlgorithmModule/include/ALLImgCheckAnalysisy.hpp +++ b/AlgorithmModule/include/ALLImgCheckAnalysisy.hpp @@ -50,6 +50,9 @@ public: // 设置检测数据,并开启检测 返回:0 成AT_THRESHOLD_TYPE_READY功 其他异常 int SetDataRun_SharePtr(std::shared_ptr p); + // 分割图片 + int split_img(cv::Mat img, std::vector &out_img_list); + // 获取结果信息 返回:0 成功 其他异常 int GetCheckReuslt(std::shared_ptr &pResult); int ReJson(std::shared_ptr p, std::shared_ptr &pResult); diff --git a/AlgorithmModule/src/ALLImgCheckAnalysisy.cpp b/AlgorithmModule/src/ALLImgCheckAnalysisy.cpp index a56576c..298fcf6 100644 --- a/AlgorithmModule/src/ALLImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ALLImgCheckAnalysisy.cpp @@ -136,6 +136,20 @@ ALLImgCheckAnalysisy::~ALLImgCheckAnalysisy() StopThread(); } +int ALLImgCheckAnalysisy::split_img(cv::Mat img, std::vector &out_img_list) +{ + out_img_list.clear(); + if (img.empty() || img.rows < 2) + { + return -1; + } + // 上下拆分成两张 + int half = img.rows / 2; + out_img_list.push_back(img(cv::Rect(0, 0, img.cols, half)).clone()); + out_img_list.push_back(img(cv::Rect(0, half, img.cols, img.rows - half)).clone()); + return 0; +} + int ALLImgCheckAnalysisy::RunStart(void *pconfig1) { VERSION_INFO *pVersionconfig = (VERSION_INFO *)pconfig1; diff --git a/example/deal.cpp b/example/deal.cpp index 8493053..7b988b8 100644 --- a/example/deal.cpp +++ b/example/deal.cpp @@ -100,6 +100,7 @@ deal::deal() m_nCamIdx = 0; m_nCurUseCPUIDX = 0; m_nSaveDetprocessImg = 0; + m_nPushImgCount = 0; m_DetResult.Init(); for (int i = 0; i < READ_IMG_THREAD_NUM; i++) { @@ -398,7 +399,7 @@ int deal::preCheck() IN_IMG_Status_ temstatus = IN_IMG_Status_Start; std::shared_ptr tempDetImageInfo = nullptr; - int pushImgNum = 0; + m_nPushImgCount = 0; // 重置送检计数(拆分后每张子图计 1) long det_time_start = getcurTime(); std::string strImgSN = strProductID; int GetImgNum = 0; @@ -460,7 +461,7 @@ int deal::preCheck() saveImg("/home/aidlux/BOE/ZB_PLATE/testresult/", checkResult); getresultNum++; - if (getresultNum == pushImgNum) + if (getresultNum >= m_nPushImgCount) { break; @@ -1079,12 +1080,47 @@ int deal::SendImgToCheck(std::shared_ptr pDetImageInfo, IN_IMG_S { tem->bsaveProcessImg = true; } - int re = 0; + + // 一张图拍多个产品:上下拆分成多张,子图产品ID加索引后缀,分别送检 + std::vector splitList; + if (!pDetImageInfo->img.empty() && pDetImageInfo->img.rows >= 2) + { + int half = pDetImageInfo->img.rows / 2; + splitList.push_back(pDetImageInfo->img(cv::Rect(0, 0, pDetImageInfo->img.cols, half)).clone()); + splitList.push_back(pDetImageInfo->img(cv::Rect(0, half, pDetImageInfo->img.cols, pDetImageInfo->img.rows - half)).clone()); + } + + if (splitList.size() > 1) + { + for (size_t i = 0; i < splitList.size(); i++) + { + std::shared_ptr sub = std::make_shared(); + *sub = *tem; + sub->img = splitList[i]; + sub->strImgProductID = tem->strImgProductID + "_" + std::to_string(i); + sub->Status = IN_IMG_Status_OneImg; + if (m_pALLImgCheckAnalysisy) + { + re = m_pALLImgCheckAnalysisy->SetDataRun_SharePtr(sub); + if (re != 0) + { + return re; + } + } + m_nPushImgCount++; + } + return 0; + } + if (m_pALLImgCheckAnalysisy) { re = m_pALLImgCheckAnalysisy->SetDataRun_SharePtr(tem); + if (re == 0) + { + m_nPushImgCount++; + } } return re; diff --git a/example/deal.h b/example/deal.h index 0a3ef64..e076902 100644 --- a/example/deal.h +++ b/example/deal.h @@ -647,6 +647,7 @@ public: ImageInfo m_ImgInfo_result; int m_nSaveDetprocessImg; + int m_nPushImgCount; // 送检图片总数(拆分后) cv::Rect m_CutRoi; Det_File_Result_Info m_DetResult;