diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index a772f81..436134c 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -1771,6 +1771,10 @@ int ImgCheckAnalysisy::GetBLob_YX() cv::findContours(erodedImage, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); int nresult = 0; + // 将 mask 一次性 resize 到 detImg 尺寸,避免循环内反复 resize + cv::Mat maskImg; + cv::resize(erodedImage, maskImg, cv::Size(m_pImageAllResult->detImg.cols, m_pImageAllResult->detImg.rows), 0, 0, cv::INTER_AREA); + for (size_t i = 0; i < contours.size(); ++i) { @@ -1788,7 +1792,15 @@ int ImgCheckAnalysisy::GetBLob_YX() roi.y *= fy_src; roi.height *= fy_src; - float len = std::sqrt(roi.width * roi.width + roi.height * roi.height); + + // 精确计算长度 + float re_len = Cal_QXLen(maskImg(roi), config_qx_type, fx_src, fy_src); + + cv::Scalar result = calc_blob_info_withstats(m_pImageAllResult->detImg, maskImg, roi); + + double min_val, max_val; + cv::Point min_loc, max_loc; + cv::minMaxLoc(m_pImageAllResult->detImg(roi), &min_val, &max_val, &min_loc, &max_loc); if (true) { @@ -1798,12 +1810,12 @@ int ImgCheckAnalysisy::GetBLob_YX() temerror.area = area; temerror.JudgArea = judgeArea; temerror.JudgArea_second = judgeArea; - temerror.energy = area * fx_src * fy_src; - temerror.flen = len; + temerror.energy = result[1]; + temerror.flen = re_len; temerror.nconfig_qx_type = config_qx_type; temerror.qx_name = qx_name; - temerror.maxValue = 0; - temerror.grayDis = 0; + temerror.maxValue = max_val; + temerror.grayDis = result[2]; temerror.density = 0; temerror.fUpIou = 0;