• 大小: 48.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-08
  • 语言: C/C++
  • 标签:

资源简介

《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\link.command.1.tlog
     文件        7080  2016-04-12 09:28  VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\link.read.1.tlog
     文件        1638  2016-04-12 09:28  VC++ 图像文字提取\图像中文字提取的程序\Debug\ImageProcessing.tlog\link.write.1.tlog
     文件         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个文件信息

评论

共有 条评论

相关资源