資源簡介
使用VC++6.0做開發工具, 采用簡單的SDI框架結構 ,一次處理一幅位圖(有興趣的可以作成MDI)
1)位圖信息的數據是從左下往右下為一行,一行一行往上排的。
2)每行像素應該是4的倍數,不足的地方用空點補齊,讀的時候注意跳過冗余點。
3)主要數據都存在Doc里面,BMP的主要數據存在一個由ImgData指向的BYTE型的內存空間(根據位圖的大小,動態分配的)。
4)數據讀進來以后,注
意向內存中貼圖,以保證刷新的效率。
5)程序執行流程
應用程序生成--》打開--》CDipView的OnFileOpen 函數--》
調用CDipDoc的FileOpen 函數--》并使用myDoc->UpdateAllViews(NULL); 刷新
自動調用CDipView的OnPaint函數--》調用CDipView的OnDraw函數----一個像素點一個像素點的畫
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
比較重要的地方
讀BMP文件,只能打開256色 (可以是灰度)
顯示和內存貼圖技術
關于調色板: 調色板實際上是一個數組,4個BYTE 分別是 B,G,R,和 Reserved
每一個像素點都有一個相應的數組。
關于VC和windows 的繪圖機制:
使用GDI(圖形設備接口)對象,通常使用CDC 類,CPaintDC也一樣(device-context)設備上下文
windows下的MFC編程機制,消息驅動,事件等待!
全局的app(應用程序對象)
注意 手工分配內存的清除 和CDC對象的刪除 以釋放系統的GDI資源
每一個new操作符都要對應一個delete
雖然已經弄出來了,還是希望大家好好讀讀源程序。
你們以后的工作:
在菜單中添加菜單項,通過ClassWizzard 生成消息響應函數(當然也可手動添加),
所有的操作應當是對 BYTE* ImgData;進行的。
在完成相應的功能后 將 isnewfile 和 isnewiamge 置為真 ,并使用myDoc->UpdateAllViews(NULL); 刷新
當然,可以更加有個性化一點,有能力的同學可以自己完成。
隨著課程的進行,菜單功能逐漸豐富,最后完成基本的數字圖像處理的功能,而不必最后一下完成一個大的作業。

代碼片段和文件信息
//?AnnBP.cpp:?implementation?of?the?CAnnBP?class.
//
//////////////////////////////////////////////////////////////////////
#include?“StdAfx.h“
#include?“AnnBP.h“
#include?“math.h“
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAnnBP::CAnnBP()
{
eta1=0.3;
momentum1=0.3;
}
CAnnBP::~CAnnBP()
{
}
double?CAnnBP::drnd()
{
return?((double)?rand()?/?(double)?BIGRND);
}
/***?返回-1.0到1.0之間的雙精度隨機數?***/
double?CAnnBP::dpn1()
{
return?(double)?(rand())/(32767/2)-1;
}
/***?作用函數,目前是S型函數?***/
double?CAnnBP::squash(double?x)
{
return?(1.0?/?(1.0?+?exp(-x)));
}
/***?申請1維雙精度實數數組?***/
double*?CAnnBP::alloc_1d_dbl(int?n)
{
double?*new1;
new1?=?(double?*)?malloc?((unsigned)?(n?*?sizeof?(double)));
if?(new1?==?NULL)?{
AfxMessageBox(“ALLOC_1D_DBL:?Couldn‘t?allocate?array?of?doubles\n“);
return?(NULL);
}
return?(new1);
}
/***?申請2維雙精度實數數組?***/
double**?CAnnBP::alloc_2d_dbl(int?m?int?n)
{
int?i;
double?**new1;
new1?=?(double?**)?malloc?((unsigned)?(m?*?sizeof?(double?*)));
if?(new1?==?NULL)?{
AfxMessageBox(“ALLOC_2D_DBL:?Couldn‘t?allocate?array?of?dbl?ptrs\n“);
return?(NULL);
}
for?(i?=?0;?i? new1[i]?=?alloc_1d_dbl(n);
}
return?(new1);
}
/***?隨機初始化權值?***/
void?CAnnBP::bpnn_randomize_weights(double?**w?int?m?int?n)
{
int?i?j;
for?(i?=?0;?i?<=?m;?i++)?{
for?(j?=?0;?j?<=?n;?j++)?{
w[i][j]?=?dpn1();
}
}
}
/***?0初始化權值?***/
void?CAnnBP::bpnn_zero_weights(double?**w?int?m?int?n)
{
int?i?j;
for?(i?=?0;?i?<=?m;?i++)?{
for?(j?=?0;?j?<=?n;?j++)?{
w[i][j]?=?0.0;
}
}
}
/***?設置隨機數種子?***/
void?CAnnBP::bpnn_initialize(int?seed)
{
CString?msgs;
msg=“Random?number?generator?seed:“;
s.Format(“%d“seed);
AfxMessageBox(msg+s);
srand(seed);
}
/***?創建BP網絡?***/
BPNN*?CAnnBP::bpnn_internal_create(int?n_in?int?n_hidden?int?n_out)
{
BPNN?*newnet;
newnet?=?(BPNN?*)?malloc?(sizeof?(BPNN));
if?(newnet?==?NULL)?{
printf(“BPNN_CREATE:?Couldn‘t?allocate?neural?network\n“);
return?(NULL);
}
newnet->input_n?=?n_in;
newnet->hidden_n?=?n_hidden;
newnet->output_n?=?n_out;
newnet->input_units?=?alloc_1d_dbl(n_in?+?1);
newnet->hidden_units?=?alloc_1d_dbl(n_hidden?+?1);
newnet->output_units?=?alloc_1d_dbl(n_out?+?1);
newnet->hidden_delta?=?alloc_1d_dbl(n_hidden?+?1);
newnet->output_delta?=?alloc_1d_dbl(n_out?+?1);
newnet->target?=?alloc_1d_dbl(n_out?+?1);
newnet->input_weights?=?alloc_2d_dbl(n_in?+?1?n_hidden?+?1);
newnet->hidden_weights?=?alloc_2d_dbl(n_hidden?+?1?n_out?+?1);
newnet->input_prev_weights?=?alloc_2d_dbl(n_in?+?1?n_hidden?+?1);
newnet->hidden_prev_weights?=?alloc_2d_dbl(n_hidden?+?1?n_out?+?1);
return?(newnet);
}
/*?釋放BP網絡所占地內存空間?*/
void?CAnnBP::bpnn_free(BPNN?*net)
{
int?n1?n2?i;
n1?=?net->
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11579??2004-06-02?12:08??opencv車牌識別系統2018\AnnBP.cpp
?????文件???????2971??2004-06-02?11:54??opencv車牌識別系統2018\AnnBP.h
?????文件??????20020??2004-06-14?01:40??opencv車牌識別系統2018\char.bp
?????文件???????1456??2004-06-05?15:26??opencv車牌識別系統2018\CharView.cpp
?????文件???????1547??2004-06-05?15:26??opencv車牌識別系統2018\CharView.h
?????文件??????24900??2004-06-14?01:40??opencv車牌識別系統2018\char_num.bp
?????文件???????1232??2004-06-14?01:40??opencv車牌識別系統2018\chdata.ch
?????文件??????50212??2009-11-22?12:55??opencv車牌識別系統2018\Debug\AnnBP.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\AnnBP.sbr
?????文件???????7048??2009-11-22?12:59??opencv車牌識別系統2018\Debug\BuildLog.htm
?????文件??????33902??2009-11-22?12:55??opencv車牌識別系統2018\Debug\CharView.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\CharView.sbr
?????文件??????31803??2009-11-22?12:55??opencv車牌識別系統2018\Debug\DigitClass.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\DigitClass.sbr
?????文件????5901312??2009-11-22?12:59??opencv車牌識別系統2018\Debug\dip.bsc
?????文件???????2048??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dip.exe.em
?????文件??????35863??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dip.obj
?????文件???16515072??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dip.pch
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dip.sbr
?????文件??????51642??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dipDoc.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\dipDoc.sbr
?????文件??????????0??2009-11-22?12:59??opencv車牌識別系統2018\Debug\dipView.sbr
?????文件??????22892??2009-11-22?12:55??opencv車牌識別系統2018\Debug\GreyDlg.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\GreyDlg.sbr
?????文件??????36504??2009-11-22?12:55??opencv車牌識別系統2018\Debug\MainFrm.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\MainFrm.sbr
?????文件??????18801??2009-11-22?12:55??opencv車牌識別系統2018\Debug\Mdlg.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\Mdlg.sbr
?????文件??????21613??2009-11-22?12:55??opencv車牌識別系統2018\Debug\RecvChar.obj
?????文件??????????0??2009-11-22?12:55??opencv車牌識別系統2018\Debug\RecvChar.sbr
............此處省略66個文件信息
評論
共有 條評論