Je reçois un segfault lors du clonage d'un cv::Mat
. Deux fonctions sont appelées, et travaillent sur m_mask
une variable membre (pas un pointeur) de ma classe:cv ::: Mat clone Segfault
Définissez le masque:
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);
}
utiliser le masque:
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;
}
Qu'a dit le débogueur? –
C'est la pire partie, je ne trouve aucune information du débogueur. J'ai compilé OpenCV et je ne l'ai pas compilé avec des symboles de débogage ... En fait, je viens de comprendre quel est mon problème ... Cela a à voir avec mes données de copie sur le code .. Je pensais que c'était correct. Je dois mettre à jour la question. – Constantin
Avez-vous essayé Mat :: copyTo au lieu de cloner? Cela ne répond pas à votre question, mais peut-être que ce pourrait être une solution de contournement. – SMK