2016-04-10 5 views
-1

最初は8 * 8の小さなブロックに切り取った画像を1つのマトリックスに入れました。私はそれらの上でいくつかの操作を行い、その後すべてをエンコードしました。OpenCVは小さなブロックから画像を再構成する(ブロックを結合する)

私はプロセスを逆にしようとしていますが、ブロックを1つの画像にまとめる部分でブロックされています。 opencvに可能な限りcで書かれた機能や方法はありますか?

ありがとうございました。ここで

+0

ご質問が広すぎる、あなたが達成したいものを記述したいくつかのコードと詳細を提供してください。 –

+0

正しいタイプと深さのフルサイズ出力マトリックスを作成します。各ブロックについて、出力行列(rowRangeおよびcolRange)の対応するROIを抽出し、ブロック(copyTo)をこのROIにコピーします。私はC API、おそらくcvGetRows、cvGetCols、cvCopyです。 –

+0

@DanMašek、grossomodoでは良いアイデアですが、問題は、それぞれのブロックの出力マトリックスのROIを抽出しようとするときです。なぜなら、それらはすべて同じサイズなので、基本的には同じROIになります出力行列。今私はスマートなアイデアのアイデアを試しています。 cvGet2DおよびcvSet2Dを使用して、対応するピクセルで完全な出力マトリックスを塗りつぶします。 – mnemonico

答えて

1

が解決され、私が見つかりました:

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); 

} 
関連する問題