opencv - échec de l'Assertion (dst.données == dst0.de données) dans cvCvtColor
Le code suivant affichera le message d'erreur:
//object is a color image with type cv::Mat
IplImage* temp_object = &(IplImage)object;
IplImage* ipl_object = cvCreateImage(cvGetSize(temp_object), 8, 3);
assert(temp_object->nChannels == 3 && temp_object->depth == IPL_DEPTH_8U);
assert(ipl_object->nChannels == 3 && ipl_object->depth == IPL_DEPTH_8U);
cvCvtColor(ipl_object, temp_object, CV_BGR2GRAY);
Erreur
OpenCV Erreur: échec de l'Assertion (dst.données == dst0.de données) dans cvCvtColor, fichier /opt/local /var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.3.1/modules/imgproc/src/color.cpp de ligne, 3175
résilier appelé à la levée d'une exception`
Code mis à jour après modification (il devrait maintenant fonctionner). Merci pour l'aide!
IplImage temp_object (object);
IplImage* ipl_object = cvCreateImage(cvGetSize(&temp_object), 8, 1);
cvCvtColor(&temp_object, ipl_object, CV_BGR2GRAY);
OriginalL'auteur LKS | 2012-02-09
Vous devez vous connecter pour publier un commentaire.
Qui ne vous donne pas un pointeur vers
object
, réinterprété commeIplImage
; au lieu de cela, il crée un temporaireIplImage
deobject
, vous donne un pointeur, puis détruit le temporaire, laissanttemp_object
pointant sur rien de valable. À l'aide detemp_object
seront ensuite donner un comportement indéterminé.Je ne suis pas familier avec la bibliothèque, mais peut-être vous voulez un pointeur vers
object
(siIplImage
est un sous-type de ce type deobject
est):à l'aide d'un plâtre pour convertir un pointeur (ou une référence, si vous préférez), et non pas l'objet lui-même.
Ou peut-être vous voulez un nouveau (non temporaires) objet:
IplImage* temp_object = static_cast<IplImage *>(&object);
donneraerror: invalid static_cast from type 'cv::Mat*' to type 'IplImage*'
Dans ce cas, peut-être que vous ne voulez faire un nouvel objet, vous devez lui donner un nom de sorte qu'il n'est pas temporaire. Voir mon edit.
Merci. Je pense que cela devrait fonctionner maintenant.
OriginalL'auteur Mike Seymour
Un autre problème est que
CV_BGR2GRAY
attend la destination à un seul canal, et pas triple. Aussi, la signature decvCvtColor()
commence avec SRC et puis l'heure d'été. Vous voulez probablement pour régler votre code pour quelque chose comme:IplImage* temp_object = static_cast<IplImage *>(&object);
. L'erreur dit qu'il est invalide static_cast. Je n'ai erreur à quelque part?Merci. Je pense que cela devrait fonctionner maintenant.
OriginalL'auteur karlphillip