Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Ben c'est ce qu'à dit sardik.
La mémoire n'est pas mis entièrement en cache. Seulement des morceaux.
Donc si tu accède à des données côte à côte, il n'y as pas besoin de mettre en cache à chaque fois.
x en premier : les accès successif sont éloigné en mémoire => perte de temps sur le cache
y en premier :les accès successif sont proche en mémoire => moins de perte de temps
Oui vous avez tout a fait raison c'est moi c'est vendredi je suis fatigué je regardait en fait ton code dans celui du message de lisco. C'est pour ca que je comprennais pas et que je te disais que a chaque tour de boucle tu faisais un saut de y*columns.
Desolé les gars heureusement que j'ai trois jours ce week end.
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Y a t-il une classe qui gere les structure en Qt car quand je declare une structure dans le .h de mon projet à la compilation j'ai l'erreur:
Ensuite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part c:/Qt/2009.01/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/ext/new_allocator.h::-1: error: multiple definition of `fxd'
Tu peux m'expliquer pourquoi , parce que je vois pas trop pourquoi il nous donne des valeurs nulles??
Tu peux m'expliquer car je suis debutant , en fait en quoi tu initialise ici tes valeurs min et max??? je suppose bien initialement ces deux variables contiennent bien des valeurs?
Pour la fameuse regle de 3, si tu peux expliquer aussi suis preneur!Donc les valeurs des pixels etaient bien des float comprises entre 0 et 2^32??
J'ai bien teste ton code il marche parfaitement, ma question est que est ce que je doit donc utiliser un QScrollArea pour pouvoir l'afficher corrctement dans mon IHM car j'utilise qu'un QLabel mais l'affichage n'est pas bonne j'ai pas la bonne image??
Ma derniere question est ce possible d'inverser le fond avec l'image c'est a dire de rendre l'image blanc et le fond noir car le but etant de visualiser l'interieur de la crane??
Encore merci pour tous ces semaines que vous avez accepter de m'aider!!
Pour ton erreur de compilation je suppose comme c'est marqué que tu as plusieur fois une variable qui se nomme fxd ?
L'initialisation des valeur min et max se font ici :
De meme quand yan dit que tes valeur sont fausse je suppose que se sont celle là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 for ( int i = 0; i < bufferSize; ++i) { float f; in >> f; //Initialisation des valeurs if (f >max) max = f; if (f <min) min = f; imageBuffer[i] =f; }
Celle de la structure rempli au debut quand tu lis ton fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 float MaxSignalLevel; // maximum value in the image float MinSignalLevel; // minimum value in the image
Pour les float je crois que tu as toujours pas compris comment cela marche.
Les float ne sont pas compris entre 0 et 2^32. Merci de regarder le lien que je t'ai envoyé hier.
Essaye pour changer le fond de l'image de faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part pixel = abs(pixel - 255);//A verifier si cela marche (inclure <cmath> dans le .cpp)
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Pas besoins de abs() essaye plutot ça :
Comme quoi je suis vraiment crevé en ce moment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pixel = 255 - pixel;
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Pas besoins de abs() essaye plutot ça :
Comme quoi je suis vraiment crevé en ce moment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part pixel = 255 - pixel;
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
pour compléter les réponses de superjaja
Tu peux m'expliquer pourquoi , parce que je vois pas trop pourquoi il nous donne des valeurs nulles??
de quoi tu parle?
min: valeur max que peut prendre un float
max: -1 * valeur max que peut prendre un float
...Pour la fameuse regle de 3, si tu peux expliquer aussi suis preneur!
Tu mélange tout. Si tu exécute mon code, tu as juste à les afficher. C'est un truc comme -127.xxx à 4530.xxxDonc les valeurs des pixels etaient bien des float comprises entre 0 et 2^32??
Le QScrollArea sert uniquement à avoir des scrollbar et à rien d'autreJ'ai bien teste ton code il marche parfaitement, ma question est que est ce que je doit donc utiliser un QScrollArea pour pouvoir l'afficher corrctement dans mon IHM car j'utilise qu'un QLabel mais l'affichage n'est pas bonne j'ai pas la bonne image??
Pour là suite, ce n'est plus du Qt, c'est du traitement d'image. Il y as un forum beaucoup plus adapté :
http://www.developpez.net/forums/f64...ement-dimages/
Masi un conseil commence par apprendre les bases. Tu trouvera ici beaucoup de cour et tuto :
http://www.developpez.net/forums/d39...erique-images/
Je te conseil celui-çi :
http://raphaello.univ-fcomte.fr/IG/T...mentImages.htm
bon courage
Bonjour, merci pour toutes ces conseils et pour le temps que vous avez passez sur mon sujet.Pour clore ce thread je veux generaliser le code à mes differents types d'images:
Voici les bouts de codes que j'ai fait adapter:
Si cela c'est bon ; je dois peut etre faire des templates ou des switch!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 /*======================================Pour une image Unsigned int===============================================*/ unsigned int bufferSize = fxd.NbColumns * fxd.NbRows; quint16 min = std::numeric_limits<quint16>::max();; quint16 max = - std::numeric_limits<quint16>::max(); std::vector<quint16> imageBuffer(bufferSize); for ( int i = 0; i < bufferSize; ++i) { quint16 f; in >> f; if (f > max) max = f; if (f < min) min = f; imageBuffer[i] =f; } /*===================================Pour une image Unsigned short==================================================*/ unsigned int bufferSize = fxd.NbColumns * fxd.NbRows; unsigned short min = std::numeric_limits<unsigned short>::max();; unsigned short = - std::numeric_limits<unsigned short>::max(); std::vector<unsigned short> imageBuffer(bufferSize); for ( int i = 0; i < bufferSize; ++i) { unsigned short f; in >> f; if (f > max) max = f; if (f < min) min = f; imageBuffer[i] =f; } /*==================================================================================================================*/
Et Yan tu me disais que ya des metodes beaucoup plus adaptées à mes images si tu peux me dire je suis preneur?
Encore merci.
Je pense qu'un template serait parfait.
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Attention, situ utilise des type non signé, cette ligne ne veut rien dire
Une autre manière est d'initialiser min/max avec la valeur du premier pixel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned xxx max = - std::numeric_limits<unsigned xxx>::max();
Plutôt template
demande de l'aide sur l'autre forum pour ceci. Il existe une infinité de méthode qui permettent de convertir tes valeur entre 0 et 255. Et une tranformation linéaire ne donnera pas souvent le résultat voulue.Et Yan tu me disais que ya des metodes beaucoup plus adaptées à mes images si tu peux me dire je suis preneur?
Par exemple, tu est d'accord que
est compris entre zéro et un. Au lieu de cette valeur, utilise la racine carré ou le carré. Tu obtiendra des résultats différents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (imageBuffer[y*columns + x] - min) / (max - min);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 float tmp = (imageBuffer[y*columns + x] - min) / (max - min); pixel = 255 * sqrt(tmp);
Bonjour, je suis entrain de faire des templates, mais là n'étant pas trop habitué et en suivant les regles j'ai rencontré des beugs dont je comprends pas trop,voici mon code:
Et voici les beugs que cela m'affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<typename T> T min = std::numeric_limits<T>::max() ; //Pour trouver le min et le max de l'image. T max = -std::numeric_limits<T>::max() ; template<typename T> std::vector<T>& imageBuffer(bufferSize) ; template<typename T> T f ;
Si quelqu'un peut m'aider svp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 error: template declaration of `T min' error: `T' does not name a type error: template declaration of `std::vector<T, std::allocator<_CharT> >&imageBuffer' error: template declaration of `std::vector<T, std::allocator<_CharT> >&imageBuffer'
Merci d'avance.
La réponse se trouve dans le code que tu as posté.
Eh Oui, je suis debutant en templates, si je peux avoir plus d'explication je suis preneur
J'arrive pas à trouver le bogue, et la partie que j'essaye de generaliser est:
Pour que cela puisse marcher pour les differents types de pixels que je peux renconter!!Et ces templates me semblent correctes , je vois pas ce qui m'echappe!!help please!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 float min = std::numeric_limits<float>::max(); float max = - std::numeric_limits<float>::max(); std::vector<float> imageBuffer(bufferSize); for ( int i = 0; i < bufferSize; ++i) { float f; in >> f; if (f > max) max = f; if (f < min) min = f; imageBuffer[i] =f; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<typename T> T min = std::numeric_limits<T>::max() ; //Pour trouver le min et le max de l'image. T max = -std::numeric_limits<T>::max() ; template<typename T> std::vector<T> imageBuffer(bufferSize) ; template<typename T> T f ;
tu peut montrer le code template que tu as fait?
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 T min = std::numeric_limits<T>::max() ; T max = -std::numeric_limits<T>::max() ;Envoyé par yan
Tu peux revenir sur cette ligne Yan stp car je vois 2 fois la methode max() sur min et max??est ce une erreur? et le signe - pour max??pourquoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 float min = std::numeric_limits<float>::max(); float max = - std::numeric_limits<float>::max();
Si j'ai bien compris là on initialise min à la valeur minimale des pixels et max à la valeur maximale!
C'est symétrique, l'opposé de max c'est -max.
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
non c'est l'inverse :
min : valeur max du pixel
max : valeur min du pixel
donc pour les type signé les valeur min et max sont symétrique mais pas pour les type non signé.
Par exemple unsigned char est compris entre 0 et 255.
Donc, une autre manière d'initialiser ces valeurs pour la recherche est de les initialiser avec la valeur du premier pixel.
Oui bien sur moi je parlais pour de float et effectivement pour les valeurs non signées ca ne marche pas. De meme pour un char cela te donnera des valeurs compris entre -128 (min) à 127 (max) alors que ta technique yan va donner si je ne me trompe pas des valeur -127 (min) à 127 (max).
Sinon pourquoi pas utiliser ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::numeric_limits<T>::min();
Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
N'hésitez pas à me contacter par MP.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager