资源简介
印章识别技术
代码片段和文件信息
// YinZhang.cpp
// 印章图像处理的一些接口
//
//////////////////////////////////////////////////////////////////////
#include “YinZhang.h“
#include “math.h“
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CYinZhang::CYinZhang()
{
m_tOriPixelArray = NULL;//原始位图数据
m_tResPixelArray = NULL;//参考位图数据
}
CYinZhang::~CYinZhang()
{
}
////////////////////////////////////////////////////////////////////
//功能:装载图像
//参数:FilePathName-图像文件路径名
void CYinZhang::LoadImage(CString &FilePathName)
{
int ij;
//检测是否为空,不为空则要释放内存
if(m_tOriPixelArray !=NULL)
{
for(i=0; i {
delete m_tOriPixelArray[i];
delete m_tResPixelArray[i];
delete ImageArray[i];
}
}
m_dib->Open(FilePathName);
ImageWidth = m_dib->GetWidth();
ImageHeight = m_dib->GetHeight();
BYTE *colorTable;
colorTable = (BYTE *)m_dib->m_pDibBits;
int byteBitCount = m_dib->GetBiBitCount()/8;
m_tOriPixelArray = new RGBQUAD*[ImageHeight];
m_tResPixelArray = new RGBQUAD*[ImageHeight];
ImageArray = new BYTE*[ImageHeight];
for(int l=0 ; l {
m_tOriPixelArray[l] = new RGBQUAD[ImageWidth];
m_tResPixelArray[l] = new RGBQUAD[ImageWidth];
ImageArray[l] = new BYTE[ImageWidth];
}
int count = 0;
for(i=ImageHeight-1; i>=0; i--)
{
for(j=0; j {
m_tOriPixelArray[i][j].rgbBlue =colorTable[count++];
m_tOriPixelArray[i][j].rgbGreen=colorTable[count++];
m_tOriPixelArray[i][j].rgbRed =colorTable[count++];
m_tOriPixelArray[i][j].rgbReserved = 0;
m_tResPixelArray[i][j]=m_tOriPixelArray[i][j];
ImageArray[i][j] = (BYTE)(((unsigned int)m_tOriPixelArray[i][j].rgbBlue
+(unsigned int)m_tOriPixelArray[i][j].rgbGreen
+(unsigned int)m_tOriPixelArray[i][j].rgbRed)/3);
count += byteBitCount-3;
}
count += (4-(ImageWidth*byteBitCount)%4)%4;
}
}
/////////////////////////////////////////////////////////////////////////////
// 去除背景
// 这里简单的采用了从原图像中提取红色部分的方案
// 参数:refer-预先设定的红色图像印章聚类的中心值
void CYinZhang::EroseBackground(RGBQUAD &refer)
{
//定义阈值,可以适当的变动
unsigned char threR = 50;
unsigned char threG = 50;
unsigned char threB = 50;
BOOL rIn gIn bIn; //用来标志RGB分量是否在阈值范围内
unsigned char temp;
int ij;
for(i=0; i {
for(j=0; j {
//先判断R分量
if((m_tOriPixelArray[i][j].rgbRed > refer.rgbRed)
&& (m_tOriPixelArray[i][j].rgbRed-refer.rgbRed rIn = true;
else if((refer.rgbRed > m_tOriPixelArray[i][j].rgbRed)
&& (refer.rgbRed-m_tOriPixelArray[i][j].rgbRed rIn = true;
else
rIn = false;
//判断G分量
if((m_tOriPixelArray[i][j].rgbGreen > refer.rgbGreen)
&& (m_tOriPixelArray[i][j].rgbGreen-refer.rgbGreen gIn = true;
else if((refer.rgbGreen > m_tOriPixelArray[i][j].rgbGreen)
&& (refer.rg
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4538 2011-08-11 09:15 第11章 印章识别\印章识别算法实例\YinZhang.cpp
文件 950 2011-08-11 09:15 第11章 印章识别\印章识别算法实例\YinZhang.h
目录 0 2011-08-11 10:20 第11章 印章识别\印章识别算法实例
目录 0 2011-08-11 10:20 第11章 印章识别
----------- --------- ---------- ----- ----
5488 4
- 上一篇:IT项目管理首都经济贸易大学试题答案
- 下一篇:龙卷风SVlanfr
ame
评论
共有 条评论