未經本人允許,不得轉載
先直接上代碼,文末會有具體分析,代碼也有相應注釋。
本文是以三張圖檔橫向排列拼接為例 ,其他的也是類似
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