bug修复 修复修复修复

好的,这里是更新后的代码,将所有 inRange 函数的第一个变量替换为 ZoomOutimage

cpp 复制代码
// 绿色分岔路
if (divergerColor == "green" && nextColor == "null")
{
    cv::Mat frameGreen, frameRed;
    frame2.copyTo(frameGreen); // 复制原始图像用于绿色二值化处理
    frame2.copyTo(frameRed);   // 复制原始图像用于红色二值化处理

    // 二值化绿色
    inRange(ZoomOutimage, colorgroup.greenMin, colorgroup.greenMax, frameGreen); // 二值化绿色
    int numberGreen = 0;
    for (int i = 0; i < frameGreen.rows; i++)
    {
        for (int j = 0; j < frameGreen.cols; j++)
        {
            if (frameGreen.at<uchar>(i, j) == 255)
            {
                numberGreen++;
            }
        }
    }

    // 二值化红色
    inRange(ZoomOutimage, colorgroup.redMin, colorgroup.redMax, frameRed); // 二值化红色
    int numberRed = 0;
    for (int i = 0; i < frameRed.rows; i++)
    {
        for (int j = 0; j < frameRed.cols; j++)
        {
            if (frameRed.at<uchar>(i, j) == 255)
            {
                numberRed++;
            }
        }
    }

    // 出现绿色条带
    if (numberGreen >= 500)
    {
        mythread.mode = divergeleft;
        cout << "recognize green divergeleft" << endl;
        divergerColor = "null";
        frame2 = frameGreen;
        return;
    }

    // 出现红色条带
    else if (numberRed >= 500)
    {
        mythread.mode = divergeleft;
        cout << "recognize red divergeleft" << endl;
        divergerColor = "null";
        frame2 = frameRed;
        return;
    }
}
// 红色分岔路
else if (divergerColor == "red" && nextColor == "null")
{
    cv::Mat frameGreen, frameRed;
    frame2.copyTo(frameGreen); // 复制原始图像用于绿色二值化处理
    frame2.copyTo(frameRed);   // 复制原始图像用于红色二值化处理

    // 二值化绿色
    inRange(ZoomOutimage, colorgroup.greenMin, colorgroup.greenMax, frameGreen); // 二值化绿色
    int numberGreen = 0;
    for (int i = 0; i < frameGreen.rows; i++)
    {
        for (int j = 0; j < frameGreen.cols; j++)
        {
            if (frameGreen.at<uchar>(i, j) == 255)
            {
                numberGreen++;
            }
        }
    }

    // 二值化红色
    inRange(ZoomOutimage, colorgroup.redMin, colorgroup.redMax, frameRed); // 二值化红色
    int numberRed = 0;
    for (int i = 0; i < frameRed.rows; i++)
    {
        for (int j = 0; j < frameRed.cols; j++)
        {
            if (frameRed.at<uchar>(i, j) == 255)
            {
                numberRed++;
            }
        }
    }

    // 出现绿色条带
    if (numberGreen >= 500)
    {
        mythread.mode = divergeright;
        cout << "recognize green divergeright" << endl;
        divergerColor = "null";
        frame2 = frameGreen;
        return;
    }

    // 出现红色条带
    else if (numberRed >= 500)
    {
        mythread.mode = divergeright;
        cout << "recognize red divergeright" << endl;
        divergerColor = "null";
        frame2 = frameRed;
        return;
    }
}

// 棕色住户识别
else if (residenceColor == "brown" && divergerColor == "null")
{
    // 复制原始图像用于二值化处理
    cv::Mat frameBrown, frameViolet;
    frame2.copyTo(frameBrown);
    frame2.copyTo(frameViolet);

    inRange(ZoomOutimage, colorgroup.brownMin, colorgroup.brownMax, frameBrown); // 二值化棕色
    int numberBrown = 0;
    for (int i = 0; i < frameBrown.rows; i++)
    {
        for (int j = 0; j < frameBrown.cols; j++)
        {
            if (frameBrown.at<uchar>(i, j) == 255)
            {
                numberBrown++;
            }
        }
    }

    inRange(ZoomOutimage, colorgroup.violetMin, colorgroup.violetMax, frameViolet); // 二值化紫色
    int numberViolet = 0;
    for (int i = 0; i < frameViolet.rows; i++)
    {
        for (int j = 0; j < frameViolet.cols; j++)
        {
            if (frameViolet.at<uchar>(i, j) == 255)
            {
                numberViolet++;
            }
        }
    }

    // 出现红色或棕色条带
    if (numberBrown >= 500)
    {
        mythread.mode = residenceright;
        cout << "recognize brown" << endl;
        residenceColor = "null";
        frame2 = frameBrown;
        return;
    }
    else if (numberViolet >= 500)
    {
        mythread.mode = residenceright;
        cout << "recognize Violet" << endl;
        residenceColor = "null";
        frame2 = frameViolet;
        return;
    }
}
// 紫色住户识别
else if (residenceColor == "violet" && divergerColor == "null")
{
    // 复制原始图像用于二值化处理
    cv::Mat frameBrown, frameViolet;
    frame2.copyTo(frameBrown);
    frame2.copyTo(frameViolet);

    inRange(ZoomOutimage, colorgroup.brownMin, colorgroup.brownMax, frameBrown); // 二值化棕色
    int numberBrown = 0;
    for (int i = 0; i < frameBrown.rows; i++)
    {
        for (int j = 0; j < frameBrown.cols; j++)
        {
            if (frameBrown.at<uchar>(i, j) == 255)
            {
                numberBrown++;
            }
        }
    }

    inRange(ZoomOutimage, colorgroup.violetMin, colorgroup.violetMax, frameViolet); // 二值化紫色
    int numberViolet = 0;
    for (int i = 0; i < frameViolet.rows; i++)
    {
        for (int j = 0; j < frameViolet.cols; j++)
        {
            if (frameViolet.at<uchar>(i, j) == 255)
            {
                numberViolet++;
            }
        }
    }
    // 出现红色或棕色条带
    if (numberBrown >= 500)
    {
        mythread.mode = residenceleft;
        cout << "recognize brown" << endl;
        residenceColor = "null";
        frame2 = frameBrown;
        return;
    }
    else if (numberViolet >= 500)
    {
        mythread.mode = residenceleft;
        cout << "recognize Violet" << endl;
        residenceColor = "null";
        frame2 = frameViolet;
        return;
    }
}

在上述代码中,所有 inRange 函数的第一个参数都已经替换为 ZoomOutimage。这样确保了所有二值化处理都是在 ZoomOutimage 上进行的。

相关推荐
e***985735 分钟前
Bug侦破大会:破解技术悬案的终极策略
bug
缘友一世3 小时前
精粤X99-TI D4 PLUS大板使用多显卡BIOS设置
bug·gpu·硬件·主板·x99
月明长歌7 小时前
测试BUG 篇:从“怎么测”到“怎么提”,再到“怎么关”全流程
软件测试·测试开发·bug
初圣魔门首席弟子1 天前
Qt自定义控件bug记录
bug
l1t2 天前
duckdb数据库CROSS JOIN LATERAL 中使用 EXISTS子查询的一个bug
数据库·bug
Zsh-cs2 天前
苍穹外卖day11销量TOP10商品展示,前端有商品名字但无销量(已解决)
bug
数字芯片实验室3 天前
仿真器出bug了?分频时钟竞争的诡异仿真现象
fpga开发·bug
Zsh-cs3 天前
苍穹外卖day9前端订单分页查询后订单菜品不展示(已解决)
bug
北数云4 天前
北数云内测|AI 需求发布区 + Bug/建议长期征
bug·模型·智能体
天上掉下个牛霸天5 天前
Bug悬案:技术侦探如何破案
bug