文档图像倾斜校正算法(1)——文本行投影法

本文介绍了文档图像倾斜校正的一种方法——文本行投影法,通过计算文本行投影值的方差来确定最佳矫正角度。此方法适用于局部变形小、干扰少的文档图像。文中给出了在火车票识别场景中应用该方法进行倾斜校正的代码片段。
摘要由CSDN通过智能技术生成

文档图像倾斜校正算法(1)——文本行投影法

原理:沿着文本行的方向对文本行进行投影得到的投影值集合,要比其他方向投影值集合的方差要大。

适用范围:投影求方差的方法适用于图像局部变形较小,干扰少的文档图像。在实现时可以先在图像中扣取一块文本行清晰的图像,再在扣取的小图上采用该方法进行图像倾斜校正。

下面代码是在做火车票识别时的倾斜校正程序,利用二维码检测的位置框取一部分文档图像,再使用该部分文档图像完成倾斜校正(只放了倾斜校正的代码):

在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <vector>
#include <numeric>
#define MY_SKEW 14

//图像旋转1:旋转(截取图像)Crop
//         Mat img :图像输入,单通道或者三通道
//         Mat & imgout :图像输出
//         int degree :图像要旋转的角度
//         int border_value:图像旋转填充值
int rotateImage1(Mat img,Mat & imgout, int degree,int border_value)
{
   
    if( img.empty())
        return 1;
    degree = -degree;//warpAffine默认的旋转方向是逆时针,所以加负号表示转化为顺时针
    double angle = degree  * CV_PI / 180.; // 弧度  
    double a = sin(angle), b = cos(angle);
    int width = img.cols;
    int height = img.rows;
    int width_rotate = int(width * fabs(b)-height * fabs(a));//height * fabs(a) +
    int height_rotate = int(height * fabs(b)-width * fabs(a));//width * fabs(a) +
    if(width_rotate<=20||height_rotate<=20)
    {
   
        width_rotate = 20;
        height_rotate = 20;
    }
    //旋转数组map
    // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]
    // [ m3  m4  m5 ] ===>  [ A21  A22   b2 ]
    float map[6];
    Mat map_matrix = Mat(2, 3, CV_32F, map);
    // 旋转中心
    CvPoint2D32f center = cvPoint2D32f(width / 2, height / 2);
    CvMat map_matrix2 = map_matrix
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值