资源简介
《VC++ 图像文字提取》项目,是采用vc++和opencv技术对单张的图片进行分析,提取出图片上面的文字信息,去掉杂余的信息(图案等)形成新的只含有文字的图片;对模式识别,车牌识别,图片文字抽取等opencv学习有一定的参考和学习意义! 这里免费分享!
代码片段和文件信息
//Download by http://www.NewXing.com
#include “stdafx.h“
#include “GlobalApi.h“
#include “Cdib.h“
#include
#include
#include
#include
/*
说明:
该函数将消去图象中面积小于或大于阈值的区域,实现文字提取*/
BOOL DIBHOLENUMBER(CDib *pDib)
{
// 指向源图像的指针
BYTE * lpSrc;
//图象的宽度和高度
LONG lWidth;
LONG lHeight;
// 图像每行的字节数
LONG lLineBytes;
//得到图象的宽度和高度
CSize SizeDim;
SizeDim = pDib->GetDimensions();
lWidth = SizeDim.cx;
lHeight = SizeDim.cy;
//得到实际的Dib图象存储大小
CSize SizeRealDim;
SizeRealDim = pDib->GetDibSaveDim();
// 计算图像每行的字节数
lLineBytes = SizeRealDim.cx;
//图像数据的指针
LPBYTE lpDIBBits = pDib->m_lpImage;
// 循环变量
int i j s n;
// 空穴的数目以及面积阈值
int nHoleNum nMinAreanMaxArea;
int nBlackPix temp;
// 正向和反响传播标志
int nDir1nDir2;
// 用来存储的一位数组
int *pnBinary;
pnBinary =new int[lHeight*lLineBytes];
// 定义阈值的大小
nMinArea = 130;
nMaxArea = 700;
// 将图象二值化
for (j = 0; j < lHeight; j++)
{
for(i = 0; i < lWidth; i++)
{
// 指向源图像倒数第j行,第i个象素的指针
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;
// 白色象素为背景,存成0
if(*lpSrc > 200)
{
pnBinary[lLineBytes * j + i] = 0;
}
// 黑象素存成-1
else
{
pnBinary[lLineBytes * j + i] = -1;
}
}
}
// 空穴数赋初值
nHoleNum = 1;
do
{
s=0;
// 寻找每个空穴的初始象素值
for (j = 1; j < lHeight - 1; j++)
{
for(i = 1; i < lWidth - 1; i++)
{
// 找到初始象素
if(pnBinary[lLineBytes * j + i] == -1)
{
s = 1;
// 将象素值改成当前的空穴数值
pnBinary[lLineBytes * j + i] = nHoleNum;
// 跳出循环
j = lHeight;
i = lLineBytes;
}
}
}
//没有初始象素,跳出循环
if(s == 0)
break;
else
{
do
{
// 正向和反响系数赋初值0
nDir1 = 0;
nDir2 = 0;
// 正向扫描
for (j = 1; j < lHeight-1; j++)
{
for(i = 1; i < lWidth-1; i++)
{
nBlackPix = pnBinary[lLineBytes * j + i];
// 如果象素已经被扫描,或者是背景色,进行下一个循环
if(nBlackPix != -1)
continue;
// 如果上侧或者左侧的象素值已经被扫描,且属于当前的空穴,当前的象素值
// 改成空穴的数值
nBlackPix=pnBinary[lLineBytes * (j-1) + i];
if(nBlackPix == nHoleNum)
{
pnBinary[lLineBytes * j + i] = nHoleNum;
nDir1 = 1;
continue;
}
nBlackPix =pnBinary[lLineBytes * j + i - 1];
if(nBlackPix == nHoleNum)
{
pnBinary[lLineBytes * j + i] = nHoleNum;
nDir1 = 1;
}
}
}
// 正向象素全部被扫描,跳出循环
if(nDir1 == 0)
break;
// 反向扫描
for (j = lHeight-2; j >= 1 ; j--)
{
for(i = lWidth-2; i >= 1 ; i--)
{
nBlackPix = pnBinary[lLineBytes * j + i];
// 如果象素已经被扫描,或者是背景色,进行下一个循环
if(nBlackPix != -1)
continue;
// 如果下侧或者右侧的象素值已经被扫描,且属于当前的空穴,当前的象素值
// 改成空穴的数值
nBlackPix=pnBinary[lLineBytes * (j+1) + i];
if(nBlackPix == nHoleNum)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-04-12 09:17 VC++ 图像文字提取\
目录 0 2016-04-12 10:20 VC++ 图像文字提取\图像中文字提取的程序\
目录 0 2016-04-12 09:17 VC++ 图像文字提取\图像中文字提取的程序\Backup\
文件 22763 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\CDIB.CPP
文件 3535 2011-05-12 08:23 VC++ 图像文字提取\图像中文字提取的程序\CDIB.H
目录 0 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\
文件 225028 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\CDIB.obj
文件 146729 2016-04-12 09:18 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageAnalysis.obj
文件 163840 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.exe
文件 1752988 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.ilk
文件 2471 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.log
文件 54548 2016-04-12 09:21 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.obj
文件 27721728 2016-04-12 09:18 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.pch
文件 5681152 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.pdb
文件 7476 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.res
目录 0 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\
文件 6000 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\cl.command.1.tlog
文件 69050 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\CL.read.1.tlog
文件 5656 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\CL.write.1.tlog
文件 207 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\ImageProcessing.lastbuildstate
文件 2406 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\li
文件 7080 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\li
文件 1638 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\li
文件 802 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\rc.command.1.tlog
文件 3348 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\rc.read.1.tlog
文件 298 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\rc.write.1.tlog
文件 77555 2016-04-12 09:18 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessingDoc.obj
文件 171952 2016-04-12 09:22 VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessingView.obj
文件 55354 2016-04-12 09:18 VC++ 图像文字提取\图像中文字提取的程序\Debug\MainFrm.obj
文件 832671 2016-04-12 09:18 VC++ 图像文字提取\图像中文字提取的程序\Debug\StdAfx.obj
文件 1666048 2016-04-12 09:28 VC++ 图像文字提取\图像中文字提取的程序\Debug\vc120.idb
............此处省略43个文件信息
- 上一篇:易学C++ 潘嘉杰 完整版+答案
- 下一篇:数据结构大作业杂志管理系统
评论
共有 条评论