gpt4 book ai didi

c++ - cv::floodFill 在用于有孔的区域时崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:30 33 4
gpt4 key购买 nike

下面的最小示例似乎陷入了无限循环。它运行了几分钟,然后最终因 std::bad_alloc (OpenCV 3.0) 而崩溃。

int main()
{
cv::Mat img( cv::Size( 128, 128 ), CV_8UC1, cv::Scalar( 128 ) );
cv::Mat mask( cv::Size( 130, 130 ), CV_8UC1, cv::Scalar( 0 ) );
cv::rectangle( img, cv::Rect( 32, 32, 64, 64 ), cv::Scalar( 0 ), CV_FILLED );
cv::rectangle( img, cv::Rect( 64, 64, 16, 16 ), cv::Scalar( 255 ), CV_FILLED ); // draw white hole in black region
cv::floodFill( img, mask, cv::Point( 42, 42 ),
cv::Scalar( 255 ), 0,
cv::Scalar( 20 ), cv::Scalar( 30 ),
cv::FLOODFILL_MASK_ONLY );
}

它试图填充黑色区域。

enter image description here

如果我移除白洞,它会像预期的那样工作。我是否使用非法参数调用该函数,或者这是一个错误?

最佳答案

您传递的 flags 值不是严格合法的——您还应该包括低位的值(用于连接和填充值,如 opencv docs 中所述):

int connectivity = 4;
int newMaskVal = 255;
cv::floodFill (..., cv::FLOODFILL_MASK_ONLY | connectivity | (newMaskVal << 8));

关于c++ - cv::floodFill 在用于有孔的区域时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366971/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com