55 votes

Conversion de cv :: Mat en IplImage *

La documentation sur ce qui semble incroyablement inégale.

J'ai essentiellement eu un tableau vide de IplImage*s (IplImage** imageArray) et je suis d'appeler une fonction pour importer un tableau de cv::Tapis - je veux convertir mon cv::Mat en un IplImage* afin que je puisse le copier dans le tableau.

Actuellement, je suis en train d'essayer ceci:

while(loop over cv::Mat array)
{
    IplImage* xyz = &(IplImage(array[i]));
    cvCopy(iplimagearray[i], xyz);
}

Ce qui génère une erreur de segmentation.

Aussi essayer:

while(loop over cv::Mat array)
{
    IplImage* xyz;
    xyz = &array[i];
    cvCopy(iplimagearray[i], xyz);
}

Ce qui me donne une erreur de compilation de: error: cannot convert ‘cv::Mat*' to ‘IplImage*' in assignment

Coincé à la façon dont je peux aller plus loin et apprécierait quelques conseils :)

22voto

YeenFei Points 2100

cv::Mat est le nouveau type introduit dans OpenCV2.X alors que IplImage* est la structure d'image "héritée".

Bien que cv::Mat prenne en charge l'utilisation de IplImage dans les paramètres du constructeur, la bibliothèque par défaut ne fournit pas de fonction dans l'autre sens. Vous devrez extraire manuellement les informations de l'en-tête de l'image. (N'oubliez pas que vous devez attribuer la structure IplImage, qui manque dans votre exemple).

21voto

William Points 2094
 Mat image1;
IplImage* image2=cvCloneImage(&(IplImage)image1);
 

Je suppose que ça va faire le travail.

14voto

user2103629 Points 11
  (you have cv::Mat old)
 IplImage copy = old;
 IplImage* new_image = ©
 

vous travaillez avec new en tant que IplImage * initialement déclaré.

1voto

octavian Points 11

Personnellement, je pense que ce n'est pas le problème causé par le transtypage, mais un problème de débordement de mémoire tampon; c'est cette ligne

 cvCopy(iplimagearray[i], xyz);   
 

que je pense va causer une erreur de segment, je vous suggère de confirmer que le tableau iplimagearray [i] a une taille de mémoire tampon suffisante pour recevoir les données copiées

0voto

pallzoltan Points 126

Basé sur la réponse de user2103629, cette solution a bien fonctionné:

 CvMat cvMatImage = [[UIImage imageNamed:@"testimage.jpg"] CVGrayscaleMat];

cv::Mat cvMatImage2 = &cvMatImage;

IplImage copy = cvMatImage2;
IplImage* newCopy = ©

NSLog(@"%i", newCopy->height);

self.imageView.image = [[UIImage alloc] initWithCVMat:newCopy];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X