58 votes

OpenCV: IplImage rapport à Tapis, pour l'utiliser?

Je suis assez nouveau à OpenCV (environ 2 mois maintenant). J'ai le livre d'Apprentissage OpenCV par Bradski et Kaehler. Ma question est, si je veux tout faire en 2.0+, quand dois-je utiliser des Matrices (Mat) et quand dois-je utiliser IplImage?

Bradky du livre les états initiaux (Préface) qu'il est rédigé sur la base d'OpenCV 2.0, et utilise principalement des IplImage dans son exemple de code, mais la plus récente de la documentation en ligne fait ressembler à de Mat est maintenant un fourre-tout de type de données pour les images, masques, etc, comme une sorte de matrice de base dans Matlab. Cela laisse me demandais si IplImage doit être considérée comme obsolète.

Donc, si je suis totalement d'éviter IplImages lors de la rédaction d'un nouveau code? Ou il y a des choses importantes IplImages me permettre de me faire des Nattes ne le font pas?

Merci.

75voto

Utkarsh Sinha Points 2213

IplImage a été dans OpenCV depuis le début. C'est une partie de l'interface C pour OpenCV. Vous avez besoin d'allouer et de libérer de la mémoire pour IplImage des structures de vous-même. (rappelez-vous l' cvReleaseImage commandes?)

Le nouveau Mat de la structure est une partie de la structure C++. Alors, évidemment, il est orienté objet. Aussi, il gère toute la mémoire pour vous! Cela permet de garder une trace de ses références. Ensuite, le nombre de références à zéro, il libère automatiquement. C'est une superbe fonctionnalité!

Aller pour Mat. Il devrait être facile à traduire le code de l' IplImage à la thingy Mat "truc" si vous utilisez un IDE qui a Intellisense (il descend de la liste des fonctions, des variables, etc que vous tapez)

16voto

Jacob Points 22306

Je vous recommande fortement de l'aide d' Mat. Je l'ai utilisé pendant un certain temps, et c'est génial. Les fonctions de membre et de la matrice des expressions de rendre les choses beaucoup plus simple que de traiter avec des IplImage et comme vous l'avez dit c'est un fourre-tout de type de données.

Aller pour Mat!

12voto

Sunny Points 1070

Je dirais que ce serait en fait dépendent de la plate-forme que vous allez exécuter votre application sur. Si vous développez une application pour un système embarqué qui vous seraient les plus susceptibles d'utiliser C. Dans ce cas, vous devez utiliser IplImage

7voto

SSilk Points 859

merci pour l'aide.

J'ai aussi découvert depuis l'affichage de cette question qu'une fonction avec un Mat comme un argument peut prendre un IplImage directement à la place du Mat argument, ce qui le rend assez facile à mettre à jour votre code en morceaux si elle est déjà décomposé en fonctions pratiques. Il suffit de changer les arguments de la fonction d' IplImage* de Mat, puis de modifier la fonction pour travailler sur un Mat. Autre code en appelant cette fonction devrait toujours fonctionner correctement (il a en mon expérience).

1voto

yash101 Points 74

Je vous suggère de le Tapis. La collecte des ordures est automatique, et donc l'application est plus fiable et a moins de fuites de mémoire. Aussi, Mat est une nouvelle méthode de stockage de données, donc si vous êtes un débutant, juste de démarrer avec OpenCV, Mat est plus récente, et nécessite moins d'attention de codage pour faire une demande complète.

La compatibilité est une chose que Mat est un peu pire. IplImage a été disponible plus longtemps et a donc une plus grande compatibilité avec la plupart des choses. Je crois que vous pouvez utiliser IplImage avec Tapis de trop, et si non, IplImage>Tapis est également très simple à réaliser.

Depuis Iplimage a été disponible pour une plus longue période de temps, vous trouverez probablement une plus grande sélection des échantillons.

Voici mes deux cents: Comme une recrue(toujours à apprendre des tours) dans la vision de traitement avec OpenCV, en choisir un, Mat ou IplImage et s'en sortent très bien. Cependant, apprendre au moins les rudiments de l'autre, donc vous savez quoi faire si vous avez besoin d'utiliser une fonction qui n'est pas compatible avec les autres.

Mais à me répéter, si vous êtes un débutant, essayez de démarrer avec Matt. Puisqu'il s'agit d'une nouvelle mise en œuvre, il est plus facile à apprendre et à droite!

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