文档图像倾斜校正算法(2)——直线检测倾斜校正
原理:检测文本块中的直线,根据直线的倾斜角完成倾斜矫正
适用范围:为避免背景中可能存在的直线干扰,应先截取到图像中的带有表格线的区域,在该区域上进行直线检测,利用检测到的直线的倾斜角完成图像的矫正。
#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(wid