关于cv::warpaffine函数
2016-04-28 16:05
169 查看
原文地址: http://blog.csdn.net/txdb/article/details/6443364
在做汉字 验证码识别时用warpAffine做了个图像旋转,发现有点问题。仔细看了下这个函数的说明,如下:
//! warps the image using affine transformation
CV_EXPORTS_W void warpAffine( const Mat& src, CV_OUT Mat& dst,
const Mat& M, Size dsize,
int flags=INTER_LINEAR,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());
对应的解释网址http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html
图像的变换通过下面的公式完成
M 矩阵可以通过cv::Mat mat = cv::getRotationMatrix2D(center, angle, 1.0); 产生
其中center确定了旋转的中心点,angle是旋转的角度,1.0是放大的倍数。
M矩阵也可以指定为其他的形式,如自己设置M的值,
以center(23,23),angle=59.9,factor=1.0旋转图像对应的M值为
注意M是CV_64F的。这个类型用at<t>似乎无法访问,它认为M是unsigned类型的。
需要强制类型转换double* m = (double*)M.data;,然后通过指针进行读取。具体代码可以参考getRotationMatrix2D的源码。
这个值通过下面的公式计算得到
第二行应该是-β α βx_0+(1-α)y_0。
在做字符旋转的时候
,-59度的角度倾斜矫正有错误,而
-32度的角度是正确的。
原因出在cv::minAreaRect上,计算左转的倾斜角度时有90的相差,后面这个图是右转的,前面是左转的。
如何知道该不该+这个90度呢?源码很长,没仔细看。大致是用最左下角的点为conner,确定两个边来计算的,问题是取那个边呢?用位置关系好像无论怎么取,左转和右转的时候,这个边都有个切换。(懒的画图了。大家可以自己画个图看看)2个边向量刚好有90度的差。一种方法是确定取长边,但有些字不适合。
另外warpAffine有个参数需要注意:WARP_INVERSE_MAP
在做汉字 验证码识别时用warpAffine做了个图像旋转,发现有点问题。仔细看了下这个函数的说明,如下:
//! warps the image using affine transformation
CV_EXPORTS_W void warpAffine( const Mat& src, CV_OUT Mat& dst,
const Mat& M, Size dsize,
int flags=INTER_LINEAR,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());
对应的解释网址http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html
图像的变换通过下面的公式完成
M 矩阵可以通过cv::Mat mat = cv::getRotationMatrix2D(center, angle, 1.0); 产生
其中center确定了旋转的中心点,angle是旋转的角度,1.0是放大的倍数。
M矩阵也可以指定为其他的形式,如自己设置M的值,
以center(23,23),angle=59.9,factor=1.0旋转图像对应的M值为
注意M是CV_64F的。这个类型用at<t>似乎无法访问,它认为M是unsigned类型的。
需要强制类型转换double* m = (double*)M.data;,然后通过指针进行读取。具体代码可以参考getRotationMatrix2D的源码。
这个值通过下面的公式计算得到
第二行应该是-β α βx_0+(1-α)y_0。
在做字符旋转的时候
,-59度的角度倾斜矫正有错误,而
-32度的角度是正确的。
原因出在cv::minAreaRect上,计算左转的倾斜角度时有90的相差,后面这个图是右转的,前面是左转的。
如何知道该不该+这个90度呢?源码很长,没仔细看。大致是用最左下角的点为conner,确定两个边来计算的,问题是取那个边呢?用位置关系好像无论怎么取,左转和右转的时候,这个边都有个切换。(懒的画图了。大家可以自己画个图看看)2个边向量刚好有90度的差。一种方法是确定取长边,但有些字不适合。
另外warpAffine有个参数需要注意:WARP_INVERSE_MAP
相关文章推荐
- GCD 深入理解:第二部分
- apache commons io 项目摘要(2016-04-21更新)
- centos系统自动化安装研究
- 团队作业五
- iOS开发网络篇—NSURLConnection基本使用
- 在ArcEngine开发中IAoInitialize的问题
- iOS-获取验证码中的倒计时功能
- 关于java的反射机制及动态代理
- 如何使用ajax读取Json中的数据
- Solr
- 比较重量
- 关于qt的线程结束
- JSONObject的fromObject
- Tasklet机制
- Linux 兴趣小组2016免试题 第四关揭秘
- 动态下载苹果系统提供的多种中文字体(适合对字体有较多需求的应用比如阅读类的app)
- [转]ExtJS Grid 分页时保持选中的简单实现方法
- android从相册中获取图片并将其显示在当前界面
- UEFI模式下安装Windows 10、Ubuntu 16.04 LTS双系统教程
- zookeeper