Open CV - cvResize and cvSet2D

Résolu/Fermé
valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 - 12 mars 2012 à 10:55
valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 - 12 mars 2012 à 14:56
Bonjour,

Voilà comme vous l'avez tous devinez, je travaille avec OpenCV.

Or j'ai deux questions à vous poser.

La première : J'utilise cvResize () et lorsque je passe mon programme à coup de DevPartner, il me sort qu'il y a une "allocation conflict" ici. Donc d'une sauriez-vous pourquoi ?

Et la seconde : j'utilise cvSet2D pour copier des pixels, blabla, sauf que sur le net, il n'est pas très conseillé d'utiliser cette méthode. Donc j'ai cherché et je suis tombé sur ça :

template<class T> class Image
{
private:
IplImage* imgp;
public:
Image(IplImage* img=0) {imgp=img;}
~Image(){imgp=0;}
void operator=(IplImage* img) {imgp=img;}
inline T* operator[](const int rowIndx) {
return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));}
};

typedef struct{
unsigned char b,g,r;
} RgbPixel;

typedef struct{
float b,g,r;
} RgbPixelFloat;

typedef Image<RgbPixel> RgbImage;
typedef Image<RgbPixelFloat> RgbImageFloat;
typedef Image<unsigned char> BwImage;
typedef Image<float> BwImageFloat;

Puis dans mon code écrire ça pour l'utiliser :

RgbImage imgA(tmp);
for (int i = 0; i < imagette2->height; i++)
{
for (int j = 0; j < imagette2->width; j++)
{
if ( j+m_carre[iteratorInMCarre].y1 < src->height && i+m_carre[iteratorInMCarre].x1 < src->width)
{
int h = m_carre[iteratorInMCarre].y2 - m_carre[iteratorInMCarre].y1;
if (j+m_carre[iteratorInMCarre].y1+h < 0 || j+m_carre[iteratorInMCarre].y1+h >= l__frame->imageInfos->height
|| i+m_carre[iteratorInMCarre].x1< 0 || i+m_carre[iteratorInMCarre].x1 >= l__frame->imageInfos->width)
{}
else
{
imgA[i][j].b = 111;
imgA[i][j].g = 111;
imgA[i][j].r = 111;
}
}
}
}

Or lorsque je l'utilise, ma vidéo me sort des frames blanches à chaque fois que l'image est modifiée. Alors que cvSet2D fonctionne bien.. Donc je sais pas :(
Mais j'ai cru remarquer que la mémoire était beaucoup moins utilisée, due aux copies de pixel direct plutôt que d'utiliser cvSet2D (). Donc si quelqu'un peut me corriger mon erreur, ça serait cool :)

Donc voilà, si vous avez des propositions, merci de m'en faire part.
ps : je suis relou pour ces petits détails, mais je dois m'y attarder, car je travaille sur un gros projet.

Cordialement,

Valentin

A voir également:

1 réponse

valgoku Messages postés 187 Date d'inscription lundi 17 avril 2006 Statut Membre Dernière intervention 22 janvier 2013 47
12 mars 2012 à 14:56
up
0