图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)
2012-11-13 19:36
1486 查看
一、问题重述
对一张图片进行镜面处理,最后实现左右对称,上下对称。
二、实现结果
1.原图:
2.实现结果:左右对称
3.实现结果:上下对称
三、实例代码
运行环境:Windows7,OpenCV2.3,VS2010
四、关键函数分析
1.SetImageROI 基于给定的矩形设置'感兴趣'区域(ROI:regionofinteresting)
rect ROI矩形.
函数cvSetImageROI基于给定的矩形设置图像的ROI(感兴趣区域).如果ROI是NULL并且参数RECT的值不等于整个图像,ROI被分配.不像COI,大多数的OpenCV函数支持ROI并且处理它就像它是一个分离的图像(例如,所有的像素坐标从ROI的左上角或左下角(基于图像的结构)计算。
2.ResetImageROI 释放图像的ROI
函数cvResetImageROI释放图像ROI.释放之后整个图像被认为是全部被选中的。相似的结果可以通过下述办法
cvSetImageROI(image,cvRect(0,0,image->width,image->height));
cvSetImageCOI(image,0);
但是后者的变量不分配image->roi.
3.cvRect 矩形框的偏移和大小
4.cvFlip 垂直,水平或即垂直又水平翻转二维数组
dst 目标责任制数组.如果dst=NULL翻转是在内部替换.
flip_mode 指定怎样去翻转数组。
flip_mode=0沿X-轴翻转,flip_mode>0(如1)沿Y-轴翻转,flip_mode<0(如-1)沿X-轴和Y-轴翻转.
函数主要使用在:
1)垂直翻转图像(flip_mode=0)用于顶-左和底-左图像结构的转换,主要用于WIN32系统下的视频操作处理;
2)水平图像转换,使用连续的水平转换和绝对值差检查垂直轴对称(flip_mode>0);
3)水平和垂直同时转换,用于连续的水平转换和绝对真理值差检查中心对称s(flip_mode<0);
4)翻转1维指针数组的顺序(flip_mode>0)。
五、引用链接
[1]http://www.opencv.org.cn/index.php/Cxcore%E6%95%B0%E7%BB%84%E6%93%8D%E4%BD%9C
[2]http://whitebaby323.blog.163.com/blog/static/110427620112280837219/?suggestedreading
对一张图片进行镜面处理,最后实现左右对称,上下对称。
二、实现结果
1.原图:
2.实现结果:左右对称
3.实现结果:上下对称
三、实例代码
运行环境:Windows7,OpenCV2.3,VS2010
#include<stdlib.h> #include<stdio.h> #include<math.h> #include<fstream> #include<string> #include<iostream> #include<opencv/cv.h> #include<opencv/highgui.h> usingnamespacestd; intmain() { IplImage*src1=cvLoadImage("1.jpg"); IplImage*src2=cvLoadImage("1.jpg"); IplImage*src3=cvLoadImage("1.jpg"); cvFlip(src2,NULL,1);//获得左右镜面倒影 cvFlip(src3,NULL,0);//获得上下镜面倒影 CvSizedstSize1; dstSize1.width=src1->width*2.0; dstSize1.height=src1->height; IplImage*dst1=cvCreateImage(dstSize1,src1->depth,src1->nChannels); cvZero(dst1); CvSizedstSize2; dstSize2.width=src1->width; dstSize2.height=src1->height*2.0; IplImage*dst2=cvCreateImage(dstSize2,src1->depth,src1->nChannels); cvZero(dst2); //---------------------------------- //载入原图像到目标图像 cvSetImageROI(dst1,cvRect(0,0,src1->width,src1->height)); cvCopy(src1,dst1); cvResetImageROI(dst1); //载入左右镜面图像到目标图像 cvSetImageROI(dst1,cvRect(src1->width,0,src1->width,src1->height)); cvCopy(src2,dst1); cvResetImageROI(dst1); //--------------------------------------- //载入原图像到目标图像 cvSetImageROI(dst2,cvRect(0,0,src1->width,src1->height)); cvCopy(src1,dst2); cvResetImageROI(dst2); //载入上下镜面图像到目标图像 cvSetImageROI(dst2,cvRect(0,src1->height,src1->width,src1->height)); cvCopy(src3,dst2); cvResetImageROI(dst2); //--------------------------------------- cvNamedWindow("dst1"); cvShowImage("dst1",dst1); cvSaveImage("right_left.jpg",dst1); cvNamedWindow("dst2"); cvShowImage("dst2",dst2); cvSaveImage("up_down.jpg",dst2); cvWaitKey(0); cvReleaseImage(&src1); cvReleaseImage(&src2); cvReleaseImage(&dst1); cvReleaseImage(&dst2); cvDestroyWindow("dst1"); cvDestroyWindow("dst2"); return0; }
四、关键函数分析
1.SetImageROI 基于给定的矩形设置'感兴趣'区域(ROI:regionofinteresting)
voidcvSetImageROI(IplImage*image,CvRectrect);image 图像.
rect ROI矩形.
函数cvSetImageROI基于给定的矩形设置图像的ROI(感兴趣区域).如果ROI是NULL并且参数RECT的值不等于整个图像,ROI被分配.不像COI,大多数的OpenCV函数支持ROI并且处理它就像它是一个分离的图像(例如,所有的像素坐标从ROI的左上角或左下角(基于图像的结构)计算。
2.ResetImageROI 释放图像的ROI
voidcvResetImageROI(IplImage*image);image 图像头.
函数cvResetImageROI释放图像ROI.释放之后整个图像被认为是全部被选中的。相似的结果可以通过下述办法
cvSetImageROI(image,cvRect(0,0,image->width,image->height));
cvSetImageCOI(image,0);
但是后者的变量不分配image->roi.
3.cvRect 矩形框的偏移和大小
typedefstructCvRect { intx;/*方形的最左角的x-坐标*/ inty;/*方形的最上或者最下角的y-坐标*/ intwidth;/*宽*/ intheight;/*高*/ }图片一般以左上角的点位原点,所以x,y设为x=0,y=0的话就表示左上角的定点。
4.cvFlip 垂直,水平或即垂直又水平翻转二维数组
voidcvFlip(constCvArr*src,CvArr*dst=NULL,intflip_mode=0);src 原数组.(原图像)
dst 目标责任制数组.如果dst=NULL翻转是在内部替换.
flip_mode 指定怎样去翻转数组。
flip_mode=0沿X-轴翻转,flip_mode>0(如1)沿Y-轴翻转,flip_mode<0(如-1)沿X-轴和Y-轴翻转.
函数主要使用在:
1)垂直翻转图像(flip_mode=0)用于顶-左和底-左图像结构的转换,主要用于WIN32系统下的视频操作处理;
2)水平图像转换,使用连续的水平转换和绝对值差检查垂直轴对称(flip_mode>0);
3)水平和垂直同时转换,用于连续的水平转换和绝对真理值差检查中心对称s(flip_mode<0);
4)翻转1维指针数组的顺序(flip_mode>0)。
五、引用链接
[1]
[2]
**************转载请注明出处**************
相关文章推荐
- 图像细化算法 opencv实现 完整代码(附实验结果)
- 图像细化算法 opencv实现 完整代码(附实验结果)
- opencv2实现n张图像拼接_stitcher具体之代码1_计算机视觉大作业1
- opencv2实现n张图像拼接_stitcher具体之代码2(简化版)_计算机视觉大作业2
- 图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)
- 利用OpenCV实现图像拼接的代码!
- 彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释
- 彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释
- 【图像特征提取12】OpenCv的SIFT图像局部特征提取描述算法C++代码的实现
- opencv图像处理常用完整示例代码总结
- 纯jsp实现的倒计时动态显示效果完整代码
- 基于JavaScript实现新增内容滚动播放效果附完整代码
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)(单目)
- opencv实现图像任意角度旋转的算法解析及代码实现
- opencv2.4.10+vs2008实现图像的拼接
- opencv 实现图像倒影(渐变)效果【源码】
- Opencv3 Sift和Surf特征实现图像无缝拼接生成全景图像
- OpenCV下的图像对比度增强之完整代码