mrDarker
2025-08-22 04d89bc9216553adcd0df87985a7665882924093
EdgeInspector_App/Process/InspectCamera.cpp
@@ -4443,6 +4443,60 @@
   strTemp.Format(_T("Notch\\Notch_%d_Defect_ProcBinImage"), nNotchIdx);
   SaveDebugImage(emDim, stFrame, pProcBinImage, strTemp);
   const double dExpectedLen = 6500;
   const double dMinNotchLen = 0.20 * dExpectedLen;
   const double dAlarmAbs = 0.10 * dExpectedLen;
   CvSeq* pContours = nullptr;
   CvMemStorage* pStorage = cvCreateMemStorage(0);
   cvFindContours(pProcBinImage, pStorage, &pContours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
   for (CvSeq* c = pContours; c != nullptr; c = c->h_next) {
      if (c->total == 0) {
         continue;
      }
      double dLength = cvArcLength(c);
      if (dLength < dMinNotchLen) {
         continue;
      }
      g_pLog->DisplayMessage(_T("Notch defect contour length: %f, Frame: %d, Scan: %d, Camera: %d, NotchIdx: %d"), dLength, stFrame.nFrameIdx, stFrame.nScanIdx, m_iCamera, nNotchIdx);
      if (std::abs(dLength - dExpectedLen) > dAlarmAbs) {
         CvRect rect = cvBoundingRect(c, 0);
         CRect rtDefectPos_pxl(
            rect.x + rtROI.left,
            rect.y + rtROI.top,
            rect.x + rect.width + rtROI.left,
            rect.y + rect.height + rtROI.top
         );
         CPoint ptDefectPos_pxl(0, 0);
         CvPoint* ptStart = reinterpret_cast<CvPoint*>(CV_GET_SEQ_ELEM(CvPoint, c, 0));
         CvPoint* ptEnd = reinterpret_cast<CvPoint*>(CV_GET_SEQ_ELEM(CvPoint, c, c->total - 1));
         if (ptStart->x < ptEnd->x) {
            ptDefectPos_pxl.x = ptStart->x + rtROI.left;
            ptDefectPos_pxl.y = ptStart->y + rtROI.top;
         }
         else {
            ptDefectPos_pxl.x = ptEnd->x + rtROI.left;
            ptDefectPos_pxl.y = ptEnd->y + rtROI.top;
         }
         CDefect_Info info;
         info.m_iFrameIdx = stFrame.nFrameIdx;
         info.m_nCamID = m_iCamera;
         info.m_nScanIdx = stFrame.nScanIdx;
         info.m_nGlassStartLine = m_pGlassData->GetSideData(emDim)->m_nGlassStartLine;
         info.m_nSideIdx = (int)emDim;
         info.m_ptDefectPos_pxl = ptDefectPos_pxl;
         info.m_rtDefectPos_pxl = rtDefectPos_pxl;
         info.m_DefectLoc = DefectLoc_Notch_Broken;
         m_pDefectControl->ExtractDefect_NotchBroken(emDim, m_iCamera, stFrame.nScanIdx, info);
         g_pLog->DisplayMessage(_T("Notch defect contour length deviates significantly from expected: %f"), dLength);
         break;
      }
   }
#if   MINI_LED == 0
   // 掘齡툇郞늴鑒,렝岺법댕돔鈴봬珂샀코닸狂痙
   int nDilateCount = pNotchParam->m_nNotch_Inspect_Defect_dilate;
@@ -4471,6 +4525,7 @@
   int iFrame = stFrame.nFrameIdx;
   CRect rtProcessArea = rtROI;
   int nMinSize_X = (pNotchParam->m_nNotch_Inspect_Defect_Min_X_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeX);
   int nMinSize_Y = (pNotchParam->m_nNotch_Inspect_Defect_Min_Y_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeY);
   int nMinSize = 0;