克隆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;
}
答案 0 :(得分:3)
我有一堆腐败...从现在开始我的一般经验法则...如果cv :: Mat是segfaulting,我在某处损坏了堆。
编辑:通过“某处”,我的意思是你可以安全地假设cv :: Mat是正确的,并且它使用的函数是正确的。你可以放心地假设你自己在某个地方破坏了内存,可能是你的指针或数据结构之一。