From c40f3eea862a91624aabe6a629f455adc9065744 Mon Sep 17 00:00:00 2001 From: Jack Yu <455501914@qq.com> Date: Tue, 1 May 2018 20:29:28 +0800 Subject: [PATCH] Update FastDeskew.cpp --- Prj-Linux/lpr/src/FastDeskew.cpp | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/Prj-Linux/lpr/src/FastDeskew.cpp b/Prj-Linux/lpr/src/FastDeskew.cpp index e220257..16c9058 100644 --- a/Prj-Linux/lpr/src/FastDeskew.cpp +++ b/Prj-Linux/lpr/src/FastDeskew.cpp @@ -1,5 +1,5 @@ // -// Created by 庾金科 on 02/10/2017. +// Created by Jack Yu on 02/10/2017. // @@ -51,59 +51,38 @@ namespace pr{ cv::Mat correctPlateImage(cv::Mat skewPlate,float angle,float maxAngle) { - cv::Mat dst; - cv::Size size_o(skewPlate.cols,skewPlate.rows); - - int extend_padding = 0; -// if(angle<0) - extend_padding = static_cast(skewPlate.rows*tan(cv::abs(angle)/180* 3.14) ); -// else -// extend_padding = static_cast(skewPlate.rows/tan(cv::abs(angle)/180* 3.14) ); - -// std::cout<<"extend:"<(skewPlate.rows*tan(cv::abs(angle)/180* 3.14) ); cv::Size size(skewPlate.cols + extend_padding ,skewPlate.rows); - float interval = abs(sin((angle /180) * 3.14)* skewPlate.rows); -// std::cout<0) { cv::Point2f pts2[4] = {cv::Point2f(interval, 0), cv::Point2f(0, size_o.height), cv::Point2f(size_o.width, 0), cv::Point2f(size_o.width - interval, size_o.height)}; cv::Mat M = cv::getPerspectiveTransform(pts1,pts2); cv::warpPerspective(skewPlate,dst,M,size); - - } else { cv::Point2f pts2[4] = {cv::Point2f(0, 0), cv::Point2f(interval, size_o.height), cv::Point2f(size_o.width-interval, 0), cv::Point2f(size_o.width, size_o.height)}; cv::Mat M = cv::getPerspectiveTransform(pts1,pts2); cv::warpPerspective(skewPlate,dst,M,size,cv::INTER_CUBIC); - } return dst; } cv::Mat fastdeskew(cv::Mat skewImage,int blockSize){ - - const int FILTER_WINDOWS_SIZE = 5; std::vector angle_list(180); memset(angle_list.data(),0,angle_list.size()*sizeof(int)); - cv::Mat bak; skewImage.copyTo(bak); if(skewImage.channels() == 3) cv::cvtColor(skewImage,skewImage,cv::COLOR_RGB2GRAY); - if(skewImage.channels() == 1) { cv::Mat eigen; - cv::cornerEigenValsAndVecs(skewImage,eigen,blockSize,5); for( int j = 0; j < skewImage.rows; j+=blockSize ) { for( int i = 0; i < skewImage.cols; i+=blockSize ) @@ -112,12 +91,10 @@ namespace pr{ float y2 = eigen.at(j, i)[5]; int angle_cell = angle(x2,y2); angle_list[(angle_cell + 180)%180]+=1.0; - } } } std::vector filtered = avgfilter(angle_list,5); - int maxPos = std::max_element(filtered.begin(),filtered.end()) - filtered.begin() + FILTER_WINDOWS_SIZE/2; if(maxPos>ANGLE_MAX) maxPos = (-maxPos+90+180)%180;