From 2c2809d77ee1c1540b88a3b662f7113ab7d42cdf Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 15 七月 2025 11:02:47 +0800
Subject: [PATCH] 重构:保存图片逻辑,替换 IplImage 为 cv::Mat - 将 保存图片中的 IplImage 接口升级为现代 OpenCV cv::Mat 实现 - 添加图像指针、尺寸等边界条件校验,避免空指针和非法尺寸写入 - 简化图像转换与保存流程,提高代码可维护性 - 保留 JPEG 压缩质量参数,保持原有功能不变
---
EdgeInspector_App/Process/InspectCamera.cpp | 30 +++++++++++++++++++++++++-----
1 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/EdgeInspector_App/Process/InspectCamera.cpp b/EdgeInspector_App/Process/InspectCamera.cpp
index a091371..909e2f7 100644
--- a/EdgeInspector_App/Process/InspectCamera.cpp
+++ b/EdgeInspector_App/Process/InspectCamera.cpp
@@ -4336,6 +4336,12 @@
m_nChamferOffset_um = 0;
#endif // MINI_LED
+ // 防止过大导致耗时或内存问题
+ if (nOffset > 50) {
+ g_pLog->DisplayMessage(_T("[WARN] Notch defect offset capped to 50 pixels, original: %d"), nOffset);
+ nOffset = 50;
+ }
+
CRect rcIns = rtROI;
rcIns.OffsetRect(-rcIns.left,-rcIns.top);
IplImage* pProcImage = cvCreateImage(cvSize(rcIns.Width(), rcIns.Height()), 8, 1);
@@ -4390,8 +4396,9 @@
strTemp.Format(_T("Notch\\Notch_%d_Defect_MaskPreImage"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pMaskImage, strTemp);
- if(0 < nOffset)
+ if (0 < nOffset) {
cvDilate(pMaskImage, pMaskImage, 0, nOffset);
+ }
strTemp.Format(_T("Notch\\Notch_%d_Defect_MaskDilateImage"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pMaskImage, strTemp);
@@ -4409,13 +4416,26 @@
strTemp.Format(_T("Notch\\Notch_%d_Defect_ProcBinImage"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pProcBinImage, strTemp);
-#if MINI_LED == 0
- cvDilate(pMaskImage, pDilatedMaskImage, 0, pNotchParam->m_nNotch_Inspect_Defect_dilate);
- strTemp.Format(_T("Notch\\Notch_%d_Defect_pMaskImage2"), nNotchIdx);
+#if MINI_LED == 0
+ // 限制膨胀次数,防止过大导致耗时或内存问题
+ int nDilateCount = pNotchParam->m_nNotch_Inspect_Defect_dilate;
+ nDilateCount = std::max(0, std::min(nDilateCount, 50));
+ if (pNotchParam->m_nNotch_Inspect_Defect_dilate != nDilateCount) {
+ g_pLog->DisplayMessage(_T("[WARN] Dilate count capped: Original=%d, Applied=%d"), pNotchParam->m_nNotch_Inspect_Defect_dilate, nDilateCount);
+ }
+
+ if (nDilateCount > 0) {
+ cvDilate(pMaskImage, pDilatedMaskImage, 0, nDilateCount);
+ }
+ else {
+ cvCopy(pMaskImage, pDilatedMaskImage);
+ }
+
+ strTemp.Format(_T("Notch\\Notch_%d_Defect_Mask_Dilated"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pDilatedMaskImage, strTemp);
cvAnd(pDilatedMaskImage, pProcBinImage, pDilatedMaskImage);
- strTemp.Format(_T("Notch\\Notch_%d_Defect_pMaskImage3"), nNotchIdx);
+ strTemp.Format(_T("Notch\\Notch_%d_Defect_Mask_And_Bin"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pDilatedMaskImage, strTemp);
#endif
--
Gitblit v1.9.3