J'ai cherché à convertir un IplImage * en Mat, mais toutes les réponses concernaient la conversion en cvMat.
Comment puis-je le faire? et quelle est la différence entre Mat et cvMat?
Merci d'avance
voici une bonne solution
Mat(const IplImage* img, bool copyData=false);
Pour la petite histoire: en jetant un œil à core/src/matrix.cpp, il semble que le constructeur cv::Mat(IplImage*)
ait disparu.
Mais j'ai trouvé cette alternative:
IplImage * ipl = ...;
cv::Mat m = cv::cvarrToMat(ipl); // default additional arguments: don't copy data.
La méthode recommandée est le cv::cvarrToMat
fonction
cv::Mat
- est la structure de données de base pour OpenCV 2.x
CvMat
- est l'ancien analogue C de cv::Mat
Consultez la documentation Mat .
// converts old-style IplImage to the new matrix; the data is not copied by default
Mat(const IplImage* img, bool copyData=false);
cv :: Mat ou Mat, les deux sont identiques.
Mat a un opérateur CvMat () donc une affectation simple fonctionne
Convertir Mat en CvMat
Mat mat = ---------;
CvMat cvmat = mat;
Convertir CVMat en Mat
Mat dst = Mat(cvmat, true);
Convertir Mat en IplImage *
> Pour un canal unique
IplImage* image = cvCloneImage(&(IplImage)mat);
> Pour trois canaux
IplImage* image = cvCreateImage(cvSize(mat.cols, mat.rows), 8, 3);
IplImage ipltemp = mat;
cvCopy(&ipltemp, image);
J'espère que cela vous aidera. À votre santé :)