首页 > 代码库 > 图像处理之图像拼接
图像处理之图像拼接
图像拼接是图像处理中最为常见的一个功能,在不考虑旋转的情况下,也就是需要求取拼接亮就行了,然而当光源是点光源时,往往成像都是高斯性质,
这样会导致中间亮,两边暗或者四周暗,在这种情况下拼接,图像会存在很明显的拼接痕迹。
因此,本文针对上述拼接痕迹,设计了一种线性平滑的方法。
上代码:
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);*/
没有采用上述拼接结果:
采用上述过渡算法的结果:
图像处理之图像拼接
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。