使用 Catch2Farmework 测试我的功能时出现问题

Problem in testing my function with Catch2Farmework

我写了一个 FindTopEnd 函数,它带有一些参数,如图所示。此函数以垂直直线从底部向上移动并检查黑色像素。如果发现黑色像素,则它会检查该点上方 3 个像素的黑色像素。如果在那里也发现了黑色像素,那么它会将初始像素值存储在变量中,并且还会存储线条的长度。否则它继续 image.On 运行 源代码,它工作正常但在测试中,它在中间停止而没有任何错误并给出错误的输出。

我已经在不同的图像上尝试过,并逐步调试输出代码,但每次 if() 条件在 150 个像素上都满足并且 for 循环中断时给出错误的输出。

注意:在测试用例中,280 像素作为输入仅用于空白 space 中的测试目的。

//This is my function
void FindTopEnd(Mat InputImage, std::int16_t LineBase_x, std::int16_t LineBase_y, std::int64_t* LineHead_x, std::int64_t* LineHead_y, std::int64_t* ArrayBox)
{
    std::int16_t LineLengthFound = 0;       //If length of line is found = 1

    *LineHead_x = LineBase_x;
    *LineHead_y = 299;
    std::int16_t x = InputImage.rows;
    for (std::int16_t LineLength = 0; LineLength < x; LineLength++)
    {
        if (InputImage.at<uint8_t>(((InputImage.rows - 1) - LineLength), *LineHead_x) == 0)// && InputImage.at<uint8_t>(((InputImage.rows - 1) - LineLength - 5), (*LineHead_x)) == 0)
        {
            if (((InputImage.rows - 1) - LineLength - 3) >= 0)
            {
                if (InputImage.at<uint8_t>(((InputImage.rows - 1) - LineLength - 3), (*LineHead_x)) == 0)
                {
                    *LineHead_y = (InputImage.rows - 1) - LineLength;
                    *ArrayBox = LineLength;
                    LineLengthFound = 1;
                    break;
                }
            }
        }
        *LineHead_y = (InputImage.rows - 1) - LineLength;
        line(InputImage, Point(LineBase_x, LineBase_y), Point(*LineHead_x, *LineHead_y), Scalar(0, 90, 0));
        imshow("line", InputImage);
        waitKey(5);

    }
    if (!LineLengthFound)       //If length is not found then the line is of length of frame (no obstacle)
    {
        *ArrayBox = InputImage.rows;
        *LineHead_y = 0;
    }
}


//This is my test case
SECTION("white space")
    {
        std::int64_t LineHead_x, LineHead_y, LineLength;
        FindTopEnd(InputTestImage, 280, 299, &LineHead_x, &LineHead_y, &LineLength);
        std::cout << LineHead_x <<std::endl << LineHead_y << std::endl << LineLength;
        REQUIRE(CIR(280, 0, LineHead_x) == 1);
        CHECK(CIR(0, 3, LineHead_y) == 1);
        CHECK(CIR(300, 2, LineLength) == 1);
        std::cout << LineHead_y;
        std::cout << " " << LineLength;
    }
//CIR function checks that the variable is in the range of +-error allowed.
//You can ignore that

我希望输出 - LineHead_x = 280,LineHead_y = 0,线长 = 300。 实际结果 - LineHead_x = 280,LineHead_y = 149,线长 = 150。

这是源代码输出的图像。这证明了这些线路是按照需要进行测试的方式创建的。 源代码输出图像 - https://ibb.co/XVCCXFY

这是测试用例的输出图像,其中线条在 150 像素处停止 测试用例的输出图像 - https://ibb.co/qpD1KwS

在测试期间,我给出了一个 3 通道图像作为输入,但是 运行 源代码中,此函数的输入图像是单通道灰度图像。改正后,测试正常。但仍然存在一个问题,即为什么线条每次都停在 150 像素处。