图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)
来源:互联网 发布:数字域名网址 编辑:程序博客网 时间:2024/05/17 06:36
一、问题重述
对一张图片进行镜面处理,最后实现左右对称,上下对称。
二、实现结果
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> using namespace std; int main(){ IplImage* src1 = cvLoadImage("1.jpg"); IplImage* src2 = cvLoadImage("1.jpg");IplImage* src3 = cvLoadImage("1.jpg");cvFlip(src2, NULL,1);//获得左右镜面倒影cvFlip(src3, NULL,0);//获得上下镜面倒影 CvSize dstSize1; dstSize1.width = src1->width *2.0; dstSize1.height = src1->height; IplImage* dst1 = cvCreateImage(dstSize1, src1->depth, src1->nChannels);cvZero(dst1);CvSize dstSize2;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"); return 0;}
四、关键函数分析
1.SetImageROI 基于给定的矩形设置'感兴趣'区域 (ROI:region of interesting)
void cvSetImageROI( IplImage* image, CvRect rect );image 图像.
rect ROI 矩形.
函数 cvSetImageROI 基于给定的矩形设置图像的 ROI(感兴趣区域) . 如果ROI是NULL 并且参数RECT的值不等于整个图像, ROI被分配. 不像 COI, 大多数的 OpenCV 函数支持 ROI 并且处理它就像它是一个分离的图像 (例如, 所有的像素坐标从ROI的左上角或左下角(基于图像的结构)计算。
2.ResetImageROI 释放图像的ROI
void cvResetImageROI( IplImage* image );image 图像头.
函数 cvResetImageROI 释放图像 ROI. 释放之后整个图像被认为是全部被选中的。相似的结果可以通过下述办法
cvSetImageROI( image, cvRect( 0, 0, image->width, image->height ));
cvSetImageCOI( image, 0 );
但是后者的变量不分配 image->roi.
3.cvRect 矩形框的偏移和大小
typedef struct CvRect{int x; /* 方形的最左角的x-坐标 */int y; /* 方形的最上或者最下角的y-坐标 */int width; /* 宽 */int height; /* 高 */}图片一般以左上角的点位原点,所以x,y设为x=0,y=0的话就表示左上角的定点。
4.cvFlip 垂直,水平或即垂直又水平翻转二维数组
void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_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]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
**************转载请注明出处**************
- 图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)
- 图像细化算法 opencv实现 完整代码(附实验结果)
- 图像细化算法 opencv实现 完整代码(附实验结果)
- 图像融合实现CT与PET图像的融合 OpenCV实现(附实验结果)
- 利用OpenCV实现图像拼接的代码!
- jQuery实现翻滚图像(附代码)
- OpenCV实现将两幅图像拼接在一起
- OpenCv实现两幅图像的拼接
- opencv实现图像的拼接功能
- 使用CALayer实现图像镜面效果
- 使用CALayer实现图像镜面效果
- opencv实现图像细化效果
- 底部Tab栏的实现(附完整代码)
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)(单目)
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
- 在websphere6中部署应用遇到的struts问题
- Android 在java代码中设置EditText只接受数字输入
- Android中如何引入第三方jar包
- 通过jsp动作元素将表单的内容和javabean的属性绑定,并显示出来。
- 11-13 (今天老师上课讲的内容和老师留的作业都在上面)
- 图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)
- java Swing表格操作
- android软件盘的开关
- 数据更新:updata 逻辑运算符的优先等级问题 not>and>or 删除一个表中的内容 约束
- 一个Java程序员应该掌握的10项技能
- 由后序和中序序列来推出树结构
- 形容词记忆(二):ful,ous,ant后缀常用词
- android图像处理之图像二值化
- Android数据库内容变化的监听