opencv学习--透视变化
透视变换和仿射变换具有很大的相同特性,前面提到了放射变化,这里再次把它拿出和透视变换进行比较
#include"cv.h"
#include"highgui.h"
using namespace cv;
void WarpPerspective(IplImage *img);
void WarpFangshe(IplImage *img);
int main()
{
IplImage *getimg = cvLoadImage("e:/picture/Wife2.jpg");
IplImage *img = cvCreateImage(cvSize(,),getimg->depth,getimg->nChannels);
cvResize(getimg,img);
WarpPerspective(img);
//WarpFangshe(img);
cvWaitKey();
cvDestroyAllWindows();
return ;
}
//透视变换
//任意四边形的变换
//透视变换需要的设置四个点
void WarpPerspective(IplImage *img)
{
IplImage *dst = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
CvMat *mat = cvCreateMat(,,CV_32FC1);
CvPoint2D32f ori_point[], dst_point[];
ori_point[].x = ; ori_point[].y = ;
ori_point[].x = img->width - ; ori_point[].y = ;
ori_point[].x = ; ori_point[].y = img->height-;
ori_point[].x = img->width - ; ori_point[].y = img->height - ;
dst_point[].x = img->width / ; dst_point[].y = img->height*0.05;
dst_point[].x = img->width*0.3;; dst_point[].y = img->height / ;
dst_point[].x = img->width*0.7; dst_point[].y = img->height / ;
dst_point[].x = img->width / ; dst_point[].y = img->height*0.9;
//获取映射矩阵
cvGetPerspectiveTransform(ori_point,dst_point,mat);
cvWarpPerspective(img,dst,mat);
//cvFlip(dst,dst,1);
cvNamedWindow("origin");
cvNamedWindow("Warp");
cvShowImage("origin",img);
cvShowImage("Warp",dst);
cvReleaseImage(&img);
cvReleaseImage(&dst);
cvReleaseMat(&mat);
}
void WarpFangshe(IplImage *img)//仿射变换
{
//定义两个CvPoint2D32F的数组
//第一个数组用来标定将要变换的原始图像中的区域
//第二个数组用来标定变换后的图像在窗口中的位置
CvPoint2D32f SrcTri[], DstTri[];
//定义仿射映射矩阵,然后计算(2*3的矩阵)
CvMat *warp_mat = cvCreateMat(, , CV_32FC1);
CvMat *rot_mat = cvCreateMat(, , CV_32FC1);
IplImage *src, *dst;
src = img;
dst = cvCloneImage(src);
SrcTri[].x = ; SrcTri[].y = ;
SrcTri[].x = src->width - ; SrcTri[].y = ;
SrcTri[].x = ; SrcTri[].y = src->height - ;
DstTri[].x = ; DstTri[].y = src->height*0.33;
DstTri[].x = src->width*0.85; DstTri[].y = src->height*0.25;
DstTri[].x = src->width*0.15; DstTri[].y = src->height*0.7;
//获取映射矩阵
cvGetAffineTransform(SrcTri, DstTri, warp_mat);
//映射变换
cvWarpAffine(src, dst, warp_mat);
cvCopy(dst, img);
cvNamedWindow("Warp");
//cvShowImage("Warp",dst);
//下面是对变换后的图像进一步旋转
CvPoint2D32f center = cvPoint2D32f(src->width / , src->height / );
double angle = 50.0;
double scale = 0.8;
//旋转图像
//上面center是旋转中心
//下面函数的第二个和第三个参数给出了旋转的角度和缩放的尺度
//最后一个参数是输出的映射矩阵
/*cv2DRotationMatrix(
CvPoint2D32F center
double angle
double scale
CvMat *map_matrix
)*/
cv2DRotationMatrix(center, angle, scale, rot_mat);
cvWarpAffine(src, dst, rot_mat);
cvShowImage("Warp", dst);
cvReleaseImage(&img);
cvReleaseImage(&dst);
}
opencv学习--透视变化的更多相关文章
- warpperspective 透视变化的opencv实现
warpperspective 透视变化的opencv2.0实现 1st-------2nd | | | | | |3rd-------4th 原始代码 cv::Mat sr ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- OpenCV 学习笔记(模板匹配)
OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- OpenCV学习笔记5
OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...
- OpenCV学习笔记3
OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
随机推荐
- 彻底删除win10的 Windows Defender
使用删除工具和一些教程,都无法删除,最后找到了这个: https://www.newasp.net/soft/351946.html 关闭掉服务后,在C盘全盘搜索,删除,完成了
- ffmpeg接收rtsp流问题
项目使用mingw环境g++5.3,C++调用ffmpeg接收rtsp流,再通过C#显示.结构上是C#调用C++的so文件,读取得到的视频帧(RGB888格式),通过图片控件显示. 一开始是使用ope ...
- Too many open files错误与解决方法
致前辈:该问题的解决思路给了我很大的启发,文章作者Lis, Linux资深技术专家. 问题现象:这是一个基于Java的web应用系统,在后台添加数据时提示无法添加,于是登陆服务器查看Tomcat 日志 ...
- Sublime Text 插件推荐——for web developers
楼主向高大上的: web front-end development engineer (好吧,google就是这样翻译的 ^_^)们推荐 ST 插件,在此抛砖引玉: NO.1 :Emmet (原名: ...
- apache不解析php文件遍历目录
程序目录下有index.php缺不能正常解析,直接刷出整个目录. 解决:在后面添加index.php的解析即可.. DirectoryIndex index.html index.html.var i ...
- 百度编辑器ueditor的图片地址修正
我用的百度编辑器为1.4.2的,相对于现在这个时间来说是比较新的.之前去的1.3版的,后来更新到1.4之后出现路径问题.因为今天晚上出现特别奇怪的问题,所以特地又整了一遍,发现这玩意还是得自己弄通了好 ...
- 算法与数据结构实验题 6.4 Summary
★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...
- 软工时间-Alpha 冲刺 (2/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 学习了UI设计软件的使用,了解了项目开发的具体流程. 展示 ...
- java—连连看-实现消除
实现消除 1.Chess.java package Linkup; /** * 棋子封装类 * * @author laixl * */ public class Chess { // 图片的 状态 ...
- iOS开发应用程序更新
#import "ViewController.h" //1一定要先配置自己项目在商店的APPID,配置完最好在真机上运行才能看到完全效果哦 #define STOREAPPID ...