2016-04-10 4 views
-1

Am Anfang rekonstruieren hatte ich ein Bild, das ich in kleine Blöcke von 8 * 8 abgeschnitten habe und sie in einer Matrix. Ich machte einige Operationen an ihnen, dann codierte ich alles.OpenCV ein Bild von kleinen Blöcken davon (kombinieren Blöcke)

Jetzt versuche ich, den Prozess umzukehren, und ich bin in dem Teil der Kombination der Blöcke in einem Bild blockiert. Gibt es irgendwelche Funktionen oder Methoden in opencv geschrieben in c wenn möglich, das könnte mir bei meinem Problem helfen?

Danke.

+0

Ihre Frage zu breit ist, geben Sie bitte einige Code und weitere Informationen zu beschreiben, was Sie erreichen wollen. –

+0

Erstellen Sie eine Ausgabematrix in voller Größe mit korrektem Typ und Tiefe. Extrahieren Sie für jeden Block einen entsprechenden ROI der Ausgabematrix (rowRange und colRange) und kopieren Sie den Block (copyTo) in diesen ROI. Ich C API, es ist wahrscheinlich cvGetRows, cvGetCols, cvCopy. –

+0

@ DanMašek, es ist eine gute Idee in grossomodo, aber das Problem ist, wenn ich versuche, einen entsprechenden ROI der Ausgangsmatrix für jeden Block, den ich habe, zu extrahieren, weil sie alle die gleiche Größe haben, also im Grunde ich in den gleichen ROI von fallen die Ausgangsmatrix. Jetzt versuche ich eine nicht schlaue Idee Idee; Mit cvGet2D und cvSet2D füllen Sie die gesamte Ausgabematrix mit den entsprechenden Pixeln. – mnemonico

Antwort

1

Hier ist die Lösung, ich gefunden:

void merging(IplImage* src,IplImage *matrice[64][64]){ 

IplImage *image; 
image = cvCreateImage(cvGetSize(src), matrice[0][0]->depth, matrice[0][0]->nChannels) ; 
int roiSize = 8; 
int i,j,k,indexW=0,indexH=0; 
CvRect rctBlock; 
CvScalar p; 

rctBlock=cvGetImageROI(matrice[64][64]); 
/* printf(" block cannaux%d\n",block->nChannels); 
printf(" image cannaux%d\n",image->nChannels); 
printf(" width %d\n",rctBlock.width); 
printf("height %d\n",rctBlock.height); */ 


for(i = 0; i < image->width/roiSize; ++i) { 
for(j = 0; j < image->height/roiSize; ++j) { 
    cvSetImageROI(image, cvRect(j*roiSize, i*roiSize, roiSize, roiSize)); 
    cvCopy(matrice[i][j],image, NULL); 
    cvResetImageROI(image);   
    } 
} 
    // printf("H %d\n",indexH+1); 
    //printf("W %d\n",indexW+1); 
    cvShowImage("image",image); 
    cvReleaseImage(&image); 

}