天天看點

Opencv實作多幅圖檔拼接在一起

未經本人允許,不得轉載

先直接上代碼,文末會有具體分析,代碼也有相應注釋。

本文是以三張圖檔橫向排列拼接為例 ,其他的也是類似

IplImage* paletteImageRam1, paletteImageRam2, paletteImageRam3;   //此處是定義了三個圖檔,實際使用時應當載入自己的三幅圖檔

//将三個圖檔拼接在一起

double width,height;

width = double(paletteImageRam1->width) *3.0;   //第一幅圖檔的寬度乘以3就是拼接完的圖像寬度,此處假設三張圖的寬高都一樣,實際使用可以将各自圖像的寬度相加

height = double(paletteImageRam1->height);        //第一幅圖像的高度

IplImage* des = cvCreateImage(cvSize(width,height), paletteImageRam1->depth, paletteImageRam1->nChannels);   //生成一個三幅拼接用的容器圖檔

cvSetImageROI(des, cvRect(0, 0,paletteImageRam1->width, height)); //設定容器圖檔中感興趣的部分,前兩個左邊0,0代表感興趣的區域的起點,後兩個代表感興趣區域的寬高                                                 

cvCopy(paletteImageRam1, des);      //将第一幅圖像放到感興趣的區域裡面,也就是第一個方格

cvResetImageROI(des);                   

cvSetImageROI(des, cvRect(paletteImageRam1->width, 0,paletteImageRam1->width,height));

cvCopy(paletteImageRam2, des);

cvResetImageROI(des);

cvSetImageROI(des, cvRect(paletteImageRam1->width*2, 0,paletteImageRam1->width,height));

cvCopy(paletteImageRam3, des);

cvResetImageROI(des);

//des就是最後拼接得到的圖像

// opencv裡面cvSetImageROI(感興趣的區域的起點x,感興趣的區域的起點y,感興趣的區域寬度w,感興趣的區域高度h)函數,是用來設定一個操作區域的,就是說設定了這個區域然後再将圖複制到這個裡面來,然後再分割第二個區域,填進去

轉載于:https://www.cnblogs.com/rain-drop/p/6828059.html