2012-02-04 2 views
0

J'essaie de redimensionner une image, puis de l'afficher pour vérifier si elle a été redimensionnée ou non.Redimensionnement et affichage de l'image

#include"cv.h" 
#include"highgui.h" 
#include<iostream> 
using namespace cv; 

int main() 
{ 
    IplImage* ipl = cvLoadImage("test1.jpg"); 
    cvShowImage("original:",ipl); 
    CvSize size = cvSize(128,128); 
    IplImage* tmpsize=cvCreateImage(size,8,0); 
    cvResize(ipl,tmpsize,CV_INTER_LINEAR); 
    cvShowImage("new",tmpsize); 

    waitKey(0); 
    return 0; 
} 

Mais il produit une erreur OpenCV Erreur: Assertion a échoué == dst.type < >> dans le fichier fonction inconnue c: \ esclave \ winInstallerMegaPack \ src \ OpenCV \ modules \ imgproc \ src \ imgwarp. cpp ligne. Veuillez indiquer ce que je fais mal et suggérer un moyen de le surmonter. D'autre part, un autre code fonctionne bien.

IplImage *source = cvLoadImage("test1.jpg"); 
// Here we retrieve a percentage value to a integer 
int percent =50; 
// declare a destination IplImage object with correct size, depth and channels 
     IplImage *destination = cvCreateImage 
(cvSize((int)((source->width*percent)/100) , (int)((source->height*percent)/100)), 
            source->depth, source->nChannels); 

//use cvResize to resize source to a destination image 
cvResize(source, destination); 

// save image with a name supplied with a second argument 
     cvShowImage("new:",destination); 
     waitKey(0); 
return 0; 

Veuillez expliquer.

+0

Le problème est que vous essayez de stocker le résultat de l'opération dans une image qui n'est pas compatible avec l'original: les deux images doivent être du même type (nchannels et profondeur). – karlphillip

+0

@ karlphillip-j'ai compris que les deux images ont une certaine différence, mais je n'étais pas en mesure de comprendre la différence.Merci. –

Répondre

1

Utilisez-vous le premier ou le deuxième exemple de code?

Si vous utilisez le premier, je suppose que votre "tmpsize" devrait avoir le même nombre de canaux que votre fichier source.

+0

J'ai essayé d'utiliser les deux codes. Le premier a produit une erreur mais le second fonctionne parfaitement bien. Et que voulez-vous dire par le même nombre de canaux? –

+0

Comme l'a expliqué karlphillip, "ipl" et "tmpsize" doivent être du même type puisque cvResize vous demande de respecter ce critère. Assurez-vous donc qu'ils ont tous les deux la même profondeur et le même nombre de canaux. Pour plus d'informations, consultez la documentation OpenCV: http://opencv.willowgarage.com/documentation/basic_structures.html#iplimage – dom

0

dans le premier exemple, vous écrivez 0 pour le nombre de canaux alors changez IplImage * tmpsize = cvCreateImage (size, 8,0); ligne IplImage * tmpsize = cvCreateImage (taille, ipl-> profondeur, ipl-> nChannels);

Questions connexes