opencv倾斜矫正
来源:互联网 发布:海淘返利 知乎 编辑:程序博客网 时间:2024/05/08 17:45
/****************倾斜校正子程序*****************///函数名称:IplImage *Rotate(IplImage *RowImage)//功能:对每行数字进行倾斜校正//入口参数:行图像RowImage//出口参数:旋转后的图像RotateRow/********************************************/IplImage *Rotate(IplImage *RowImage){ //建立储存边缘检测结果图像canImage// IplImage *canImage=cvCreateImage(CvSize(200,300),IPL_DEPTH_8U,1); IplImage *canImage=cvCreateImage(cvGetSize(RowImage),IPL_DEPTH_8U,1); //进行边缘检测 cvCanny(RowImage,canImage,30,200,3); //进行hough变换 CvMemStorage *storage=cvCreateMemStorage(); CvSeq *lines=NULL; lines=cvHoughLines2(canImage,storage,CV_HOUGH_STANDARD,1,CV_PI/180,20,0,0); //统计与竖直夹角<30度的直线个数以及其夹角和 int numLine=0; float sumAng=0.0; for(int i=0;i<lines->total;i++) { float *line=(float *)cvGetSeqElem(lines,i); float theta=line[1]; //获取角度 为弧度制 if(theta<30*CV_PI/180 || (CV_PI-theta)<30*CV_PI/180 ) { numLine++; sumAng=sumAng+theta; } } //计算出平均倾斜角,anAng为角度制 float avAng=(sumAng/numLine)*180/CV_PI; //获取二维旋转的仿射变换矩阵 CvPoint2D32f center; center.x=float (RowImage->width/2.0); center.y=float (RowImage->height/2.0); float m[6]; CvMat M = cvMat( 2, 3, CV_32F, m ); cv2DRotationMatrix( center,avAng,1, &M); //建立输出图像RotateRow double a=sin(sumAng/numLine); double b=cos(sumAng/numLine); int width_rotate=int (RowImage->height*fabs(a)+RowImage->width*fabs(b)); int height_rotate=int (RowImage->width*fabs(a)+RowImage->height*fabs(b)); IplImage *RotateRow=cvCreateImage(cvSize(width_rotate,height_rotate),IPL_DEPTH_8U,1); //变换图像,并用黑色填充其余值 m[2]+=(width_rotate-RowImage->width)/2; m[5]+=(height_rotate-RowImage->height)/2; cvWarpAffine(RowImage,RotateRow, &M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(0)); //释放 cvReleaseImage(&canImage); cvReleaseMemStorage(&storage); return RotateRow;}int main(int argc, char *argv[]){// QCoreApplication a(argc, argv); Mat imgMat = imread("20160802.jpeg");//const String* filename);// Mat imgMat = imread("DSCN6533.png");//const String* filename); if(imgMat.empty())return -1; //是否加载成功 if(!imgMat.data)return -1;//判断是否有数据// IplImage pImg= IplImage(imgMat); IplImage *pImg = cvLoadImage("20160802.jpeg"); IplImage *tImg =Rotate(pImg);// IplImage* img = cvCreateImage(cvGetSize(mat),8,1);// cvGetImage(matI,img); cvSaveImage("rice1.png",tImg); //建立储存边缘检测结果图像canImage return 0;//a.exec();}
上述代码会报错:
Assertion failed (src.type() == dst.type()) in cvWarpAffine, file /home/lbg/softs/opencv-3.0.0/modules/imgproc/src/imgwarp.cpp, line 6369
terminate called after throwing an instance of 'cv::Exception'
what(): /home/lbg/softs/opencv-3.0.0/modules/imgproc/src/imgwarp.cpp:6369: error: (-215) src.type() == dst.type() in function cvWarpAffine
下面是python的:
参考:https://github.com/lyzh1688/SlantCorrection
opencv图像校正(摄像头校正)
需要事先标定:
http://download.csdn.net/download/hs5530hs/9046567
需要事先标定:
http://blog.csdn.net/zht9961020/article/details/7036786
0 0
- opencv倾斜矫正
- openCV-图片倾斜矫正java版
- OpenCV仪表数据识别(四):图像倾斜矫正
- OpenCV仪表数据识别(四):图像倾斜矫正
- 车牌识别--倾斜矫正
- 车牌识别--倾斜矫正
- 车牌识别--倾斜矫正
- 名片识别(一)倾斜矫正
- 手写数字识别系统之倾斜矫正
- 纸牌矫正opencv
- opencv 相机标定与矫正
- opencv实现旋转+倾斜
- CorelDRAW中怎样对图像进行快速的倾斜矫正
- tesseract源码Page Layout解读(倾斜矫正)
- opencv仅仅实现图片倾斜倾斜
- opencv学习笔记--标定与矫正
- OpenCV 透视变换【图像归一化矫正】
- OpenCV文本图像的旋转矫正
- 希尔排序
- 算法训练 OpenJudge 8469
- PAT甲级1090
- Struts2入门详解
- 1.Python的pip使用
- opencv倾斜矫正
- 贪心算法解决雷达站建站问题
- Android轮播广告
- JavaScript日记——Angularjs入门指南
- POJ 1363 Rails ( 栈
- 纯QML实现聊天气泡页面(demo)
- 在mac系统安装Apache Tomcat的详细步骤
- Mac OS X中virtualenv里python shell无法使用光标键问题的解决
- 贝叶斯(朴素贝叶斯,正太贝叶斯)及OpenCV源码分析