bonjour
j'ai fait un programme sur matlab pour tester une algorithme
mais quand je le reprogramme en vc++, j'ai rencontré quelques pb
par exemple,matlab considére l'image comme une matrice
par contre en vc++ n'est plus le cas
par exemple je veux convertir ce code matlab en vc+++
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 RGBuint8 = imread('CLOWN.BMP'); % lecture de l'image bmp couleur matrice = double(RGBuint8); %conversion des coefficients au format double qualite=10; % en vc++ c pas le cas , càd j'ouvre l'image suivant une chemin %recuperation des dimensions de la matrice (hauteur, largeur) dim = size(matrice(:,:,1)); %on suppose que les images ont des dimensions qui sont des multiples de 8 %nombre de matrice 8x8 dans la largeur de l'image nb_mat8_larg = dim(1)/8; %nombre de matrice 8x8 dans la hauteur de l'image nb_mat8_haut = dim(2)/8; %fabrication de la matrice 8x8 de quantification M_Q = mat_quant(qualite); for k=1:3 for i=0:(nb_mat8_larg-1) for j=0:(nb_mat8_haut-1) %matrice 8x8 temporaire sur laquelle on va faire la DCT M88 = matrice((1+8*i):(8*(i+1)),(1+8*j):(8*(j+1)),k); end; end;par conte en vc++ j'ecris:
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 function[res]=ajoute(m,valeur) %fonction qui permet d'ajouter ou de retrancher une certaine valeur à tous %les coefficients d'une matrice %parametres d'entree % -m la matrice sur laquelle va porter le calcul % -valeur la valeur a ajouter (ou retrancher si nombre negatif) %parametres de sortie % -res la matrice du resultat %recuperation de la taille de la matrice taille = size(m); %construction d'une matrice que l'on va ajouter à m temp = ones(taille(1),taille(2)) * valeur; res = m + temp;
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 OOL CImage::Compression(int qualite) { if(!m_hDib) return FALSE; // DIB non valide if(!m_hDib) return FALSE; // DIB non valide LPBITMAPINFOHEADER BmSrcInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib); LPBITMAPINFO biSrc=(LPBITMAPINFO)BmSrcInfo; // Détermination du nombre de couleurs int nColors = BmSrcInfo->biClrUsed ? BmSrcInfo->biClrUsed : 0x1FF & (1 << BmSrcInfo->biBitCount); // on suppose que les images ont des dimensions qui sont des multiples de 8 //nombre de matrice 8x8 dans la largeur de l'image nb_mat8_larg = BmInfo->biHeight/8; //nombre de matrice 8x8 dans la hauteur de l'image nb_mat8_haut = BmInfo->biWidth/8
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
33 // Ramène la largeur du bitmap int CImage::GetWidth() const { int nRet=NULL; if(m_hDib) { LPBITMAPINFOHEADER BmInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib); nRet=BmInfo->biWidth; GlobalUnlock(m_hDib); } return nRet; } // Ramène la hauteur du bitmap int CImage::GetHeight() const { int nRet=NULL; if(m_hDib) { LPBITMAPINFOHEADER BmInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib); nRet=BmInfo->biHeight; GlobalUnlock(m_hDib); } return nRet; } voila j'ai pas arriver à completer le code en vc++ cmment je convertis la boucle pour disingner que 3 signifie chaque couleur (vert, bleu, rouge) est quelqu'un peut me completer le code:cry: :cry:
Partager