123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #pragma once
- #include <string>
- #include "schema_struct.h"
- #include "schema_struct_auto.h"
- void SetTBLR(identify::autoschema::ASCH_SchemaQuestionScore& score);
- /************************************************************************/
- /* 按x坐标升序排序 2014年11月28日10:50:56 */
- /************************************************************************/
- bool sortx(const CvContour * c1,const CvContour * c2);
- /************************************************************************/
- /* 按y坐标升序排序 2014年11月28日10:51:22 */
- /************************************************************************/
- bool sorty(const CvContour * c1,const CvContour * c2);
- /************************************************************************/
- /*解析条码图像 */
- /************************************************************************/
- int PraseQRCode(IplImage* img ,std::string & resultString);
- /************************************************************************/
- /*计算两个点所组成的执行与x轴的夹角 */
- /************************************************************************/
- double degree(const int& x1,const int& y1,const int& x2,const int& y2);
- /************************************************************************/
- /* 获取区域黑色点数量 */
- /************************************************************************/
- int GetBlackArea( const IplImage * dst ,int valve =180);
- /************************************************************************/
- /* rgb模型(颜色空间)转换为hsv模型(颜色空间) */
- /************************************************************************/
- void rgb2hsv(const int& r,const int& g,const int& b,float& h,float& s,float& v);
- /************************************************************************/
- /* 从灰度图像中获取灰度值 2014年11月28日20:10:57 */
- /************************************************************************/
- int GetGrayValue( const IplImage * dst, int x, int y );
- /************************************************************************/
- /* 从RGB图像中获取灰度值 2014年11月28日20:11:13 */
- /************************************************************************/
- int GetBGRGray( const IplImage * dst, int x, int y );
- /************************************************************************/
- /* 切割图像 2014年11月28日20:11:13 */
- /************************************************************************/
- IplImage* CutImage( IplImage* img,CvRect rect);
- /************************************************************************/
- /* 斜切图像 2014年11月28日20:11:13 */
- /************************************************************************/
- IplImage* CutRotateImage(const IplImage* img,CvPoint center,CvSize size,float degree);
- void split(std::string& s, std::string& delim,std::vector< std::string >* ret);
- //排序CvRect
- bool sort_locate_point_by_x( const CvRect c1,const CvRect c2 );
- bool sort_locate_point_by_y( const CvRect c1,const CvRect c2 );
- //计算两个点组成的三角函数值和距离
- template<class Point> inline void caculate_sc(const Point &p2,const Point &p1, double &sina, double &cosa ,double& d){
- double dy =p2.y-p1.y;
- double dx =p2.x-p1.x;
- d = sqrt(dx*dx+dy*dy);
- sina=dy/d;
- cosa=dx/d;
- }
- /***********************计算仿射变换矩阵,并旋转图像*********************************/
- /************************************************************************/
- /*校正图像 http://blog.csdn.net/xiaowei_cqu/article/details/7616044 */
- /************************************************************************/
- template<class Point> void JiaoZheng(const IplImage * src,IplImage * dst,Point p_dst1,Point p_dst2,Point p_src1,Point p_src2){
- double sin_dst ;double cos_dst;
- double sin_src ;double cos_src;
- double da,db;
- caculate_sc(p_src2, p_src1, sin_src, cos_src,db);
- caculate_sc(p_dst2, p_dst1, sin_dst, cos_dst,da);
- double sina_b=-sin_dst*cos_src+cos_dst*sin_src;
- double cosa_b=cos_dst*cos_src+sin_dst*sin_src;
- double scale = da/db;
- float degree = 90;
- double offsetx = p_dst1.x-(cosa_b*scale*p_src1.x+sina_b*scale*p_src1.y);
- double offsety = p_dst1.y-(-sina_b*scale*p_src1.x+cosa_b*scale*p_src1.y);
- float m1[6]={cosa_b*scale,sina_b*scale,offsetx,-sina_b*scale,cosa_b*scale,offsety};
- CvMat M = cvMat(2, 3, CV_32F, m1);
- cvWarpAffine( src, dst, &M,CV_INTER_LINEAR,cvScalarAll(255) );
- }
- //计算旋转矩阵
- template<class Point> CvMat* caculate_scm(const Point &p_dst1,const Point & p_dst2,const Point & p_src1,const Point & p_src2){
- double sin_dst ;double cos_dst;
- double sin_src ;double cos_src;
- double da,db;
- caculate_sc(p_src2, p_src1, sin_src, cos_src,db);
- caculate_sc(p_dst2, p_dst1, sin_dst, cos_dst,da);
- double sina_b=-sin_dst*cos_src+cos_dst*sin_src;
- double cosa_b=cos_dst*cos_src+sin_dst*sin_src;
- double scale = da/db;
- float degree = 90;
- double offsetx = p_dst1.x-(cosa_b*scale*p_src1.x+sina_b*scale*p_src1.y);
- double offsety = p_dst1.y-(-sina_b*scale*p_src1.x+cosa_b*scale*p_src1.y);
- float m1[6]={cosa_b*scale,sina_b*scale,offsetx,-sina_b*scale,cosa_b*scale,offsety};
- CvMat* m=cvCreateMat(2, 3, CV_32F);
- memcpy(m->data.fl,m1,sizeof(float)*6);
- return m;
- }
- int PraseQRCode_Normal( IplImage* img ,std::string & resultString );
- int PraseBarCode_Normal( IplImage* img ,std::string & resultString );
- int PraseBarCode( IplImage* img ,std::string & resultString );
- //从灰度图像中获取灰度值
- #define GET_GRAY_VALUE_BY_FIRST(first,x) (first[x]&&0xff)
- #define GET_GRAY_VALUE(img,x,y) GET_GRAY_VALUE_BY_FIRST(&img->imageData[img->widthStep*y],x)
- //从RBG图像中获取灰度值
- #define GET_GRAY_VALUE_BY_RBG_FIRST(first,x) (((0xff& first[x*3])*15+(0xff&first[x*3+1])*75+(0xff&first[x*3+2])*38)>>7)
- #define GET_GRAY_VALUE_BY_RBG(img,x,y) GET_GRAY_VALUE_BY_RBG_FIRST(&img->imageData[img->widthStep*y],x)
- template<typename T1,typename T2> T2 warpAffinePoint(T1& src,Mat * map_matrix){
- T2 r;
- r.x = map_matrix->at<double>(0,0)*src.x+map_matrix->at<double>(0,1)*src.y+map_matrix->at<double>(0,2);
- r.y = map_matrix->at<double>(1,0)*src.x+map_matrix->at<double>(1,1)*src.y+map_matrix->at<double>(1,2);
- return r;
- }
- template<typename T1,typename T2 >
- double GetDistance( T1 point1, T2 point2 )
- {
- double dx = point1.x-point2.x;
- double dy = point1.y-point2.y;
- return sqrt(dx*dx+dy*dy);
- }
|