首页 > 代码库 > 图像处理之图像拼接

图像处理之图像拼接

    图像拼接是图像处理中最为常见的一个功能,在不考虑旋转的情况下,也就是需要求取拼接亮就行了,然而当光源是点光源时,往往成像都是高斯性质,

这样会导致中间亮,两边暗或者四周暗,在这种情况下拼接,图像会存在很明显的拼接痕迹。

    因此,本文针对上述拼接痕迹,设计了一种线性平滑的方法。

上代码:

 1 CString leftimagepath;
 2                 CString rightimagepath;
 3                 leftimagepath.Format("0-%d-%d.jpg",i,j);
 4                 leftimagepath=pathIn+leftimagepath;
 5                 rightimagepath.Format("0-%d-%d.jpg",i,j+1);
 6                 rightimagepath=pathIn+rightimagepath;
 7                 IplImage* leftimg=cvLoadImage(leftimagepath,-1);
 8                 IplImage* rightimg=cvLoadImage(rightimagepath,-1);
 9                 sourewidth=rightimg->width;
10                 soureheight=rightimg->height;
11                 IplImage* rightresult=cvCreateImage(cvSize(sourewidth*2,soureheight),8,rightimg->nChannels);
12                 cvZero(rightresult);
13                 cvSetImageROI(rightresult,cvRect(sourewidth-xsum,0,sourewidth,soureheight));
14                 cvCopy(rightimg,rightresult);
15                 cvResetImageROI(rightresult);
16                 IplImage* result=cvCreateImage(cvSize(sourewidth*2,soureheight),8,rightimg->nChannels);
17                 cv::Mat imleft(leftimg,0); //左边的图像
18                 cv::Mat imright(rightresult,0); //右边的图像,但是右边的有效区域开始于(左边的图像大小减去重合量)
19                 cv::Mat dst(result,0); //结果图像
20                 int channle = imright.channels();
21                 for(int jx = 0;jx < imright.rows;jx++)
22                 {   
23                     // 行定位
24                     uchar *data =http://www.mamicode.com/dst.ptr(jx);                // 最终要得到的拼接图"0-%d-%d.jpg",i,j);
59                     saveleftimagepath=pathIn+saveleftimagepath;
60                     cvSaveImage(saveleftimagepath,result);
61                     cvResetImageROI(result);
62                     //覆盖原始图像
63                     CString saverigimagepath;
64                     saverigimagepath.Format("0-%d-%d.jpg",i,j+1);
65                     saverigimagepath=pathIn+saverigimagepath;
66                     cvSetImageROI(result,cvRect(rightimg->width-xsum,0,rightimg->width,rightimg->height));
67                     cvSaveImage(saverigimagepath,result);
68                     cvResetImageROI(result);
69                     /*cvNamedWindow("rs",0);
70                     cvShowImage("rs",result);
71                     cvWaitKey(0);*/

没有采用上述拼接结果:

 技术分享采用上述过渡算法的结果:

技术分享

 

 
 

图像处理之图像拼接