资源简介
用OPENCV 实现邮政编码的识别 包括倾斜矫正和字符分隔

代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
IplImage* rotateImage2(IplImage* img double angle)
{
//double angle = degree /180*CV_PI;
int step;
int ijk;
uchar*data ;
cout<<“angle=“< double a = sin(angle) b = cos(angle);
int width=img->width height=img->height;
//旋转后的新图尺寸
int width_rotate= int(height * fabs(a) + width * fabs(b));
int height_rotate=int(width * fabs(a) + height * fabs(b));
IplImage* img_rotate = cvCreateImage(cvSize(width_rotate height_rotate) img->depth img->nChannels);
cvZero(img_rotate);
step=img->widthStep/sizeof(uchar);
data = (uchar*)img->imageData;
for(i=0;iheight;i++)
for(j=0;jwidth;j++)
for(k=0;knChannels;k++)
data[i*step+j*img->nChannels+k]=255-data[i*step+j*img->nChannels+k];//反色
//保证原图可以任意角度旋转的最小尺寸
int tempLength = sqrt((double)width * width + (double)height *height) + 10;
int tempX = (tempLength + 1) / 2 - width / 2;
int tempY = (tempLength + 1) / 2 - height / 2;
IplImage* temp = cvCreateImage(cvSize(tempLength tempLength) img->depth img->nChannels);
cvZero(temp);
//将原图复制到临时图像tmp中心
cvSetImageROI(temp cvRect(tempX tempY width height));
cvCopy(img temp NULL);
cvResetImageROI(temp);
//旋转数组map
// [ m0 m1 m2 ] ===> [ A11 A12 b1 ]
// [ m3 m4 m5 ] ===> [ A21 A22 b2 ]
float m[6];
int w = temp->width;
int h = temp->height;
m[0] = b;
m[1] = a;
m[3] = -m[1];
m[4] = m[0];
// 将旋转中心移至图像中间
m[2] = w * 0.5f;
m[5] = h * 0.5f;
CvMat M = cvMat(2 3 CV_32F m);
cvGetQuadrangleSubPix(temp img_rotate &M);
step=img_rotate->widthStep/sizeof(uchar);
data = (uchar*)img_rotate->imageData;
for(i=0;iheight;i++)
for(j=0;jwidth;j++)
for(k=0;knChannels;k++)
data[i*step+j*img_rotate->nChannels+k]=255-data[i*step+j*img_rotate->nChannels+k];//反色
cvReleaseImage(&temp);
return img_rotate;
}
int otsu(const IplImage *src)
{
double sum=0.0;
double w0=0.0;
double w1=0.0;
double u0_temp=0.0;
double u1_temp=0.0;
double u0=0.0;
double u1=0.0;
double delta_temp=0.0;
double delta_max=0.0;
int pixel_count[256]={0};
float pixel_pro[256]={0};
int threshold=0;
uchar *data=(uchar *)src->imageData;
for(int i=0;iheight;i++)
{
for(int j=0;jwidth;j++)
{
pixel_count[(int)data[i*src->width+j]]++;
sum+=(int)data[i*src->width+j];
}
}
cout<<“平均灰度:“<height*src->width)<
for(int i=0;i<256;i++)
{
pixel_pro[i]=(float)pixel_count[i]/(src->height*src->width);
}
for(int i=0;i<256;i++)
{
w0=w1=u0_temp=u1_temp=u0=u1=delta_temp=0;
for(int j=0;j<256;j++)
{
if(j<=i)
{
w0+=pixel_pro[j];
u0_temp+=j*pixel_pro
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 26839 2013-05-18 18:13 邮政编码识别\图片\save1.jpg
文件 27927 2013-05-18 15:20 邮政编码识别\图片\save18.jpg
文件 29007 2013-05-18 18:14 邮政编码识别\图片\save3.jpg
文件 80896 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\Debug\zifushibie.exe
文件 483052 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\Debug\zifushibie.ilk
文件 1698816 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\Debug\zifushibie.pdb
文件 1178 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\cl.command.1.tlog
文件 38266 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\CL.read.1.tlog
文件 288 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\CL.write.1.tlog
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
文件 2 2014-12-28 21:56 邮政编码识别\邮政编码识别程序\zifushibie\Debug\li
............此处省略42个文件信息
相关资源
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- 基于Opencv实现的图像纠偏
- ImageWatch2019.vsix
评论
共有 条评论