cv:::Mat clone Segfault

cv:::Mat clone Segfault

本文关键字:Segfault clone Mat cv      更新时间:2023-10-16

克隆cv::Mat时出现段错误。两个函数被调用,并在m_mask上工作,我的类的一个成员变量(不是指针):

设置掩码:

void SetMask(QImage mask)
{
    if(!mask.isNull() && mask.depth() == 1)
    {
        std::cout << "Mask width: " << mask.width() << " and mask height: " << mask.height() << std::endl << std::flush;
        if(mask.width() != m_mask.cols || mask.height() != m_mask.rows)
            m_mask.create(mask.height(), mask.width(), CV_8UC1);
        if(m_mask.data == 0)
            std::cout << "MALLOC FAILED" << std::endl << std::flush;
        //Copy data here
        cv::imshow("OpenCV Image", m_mask);
    }
    else
        m_mask = cv::Scalar(0);
}

然后使用掩码:

QString MaskToXML()
{
    QString xml_out;
    if(!m_mask.empty())
    {
        cv::Mat workspace = m_mask.clone(); //Clone our mask - SEGFAULT HERE
        //Run the contour code
        std::vector< std::vector<cv::Point> > contours;
        cv::findContours(workspace, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
        //do stuff
    }
    return xml_out;
}

我有一个堆损坏…从现在开始,我的经验法则是……如果cv::Mat是分段错误,我在某处损坏了堆。

编辑:"某处",我的意思是你可以安全地假设cv::Mat是正确的,它使用的函数是正确的。您可以放心地假设您正在自己的某个地方损坏内存,可能是在您的指针或数据结构之一。