資源簡介
基于梯度算子 soble 算子的 邊緣檢測 VisualC++實(shí)現(xiàn)(可重建圖像)

代碼片段和文件信息
//?************************************************************************
//??文件名:edgecontour.cpp
//
//??圖像邊緣與輪廓運(yùn)算API函數(shù)庫:
//
//??RobertDIB() -?robert邊緣檢測運(yùn)算
//??SobelDIB() -?sobel邊緣檢測運(yùn)算
//??PrewittDIB() -?prewitt邊緣檢測運(yùn)算
//??KirschDIB() -?kirsch邊緣檢測運(yùn)算
//??GaussDIB() -?gauss邊緣檢測運(yùn)算
//??HoughDIB() -?利用Hough變換檢測平行直線
//??ContourDIB() -?輪廓提取
//??TraceDIB() -?輪廓跟蹤
//??FillDIB() -?種子填充算法1
//??Fill2DIB() -?種子填充算法2
//
//?************************************************************************
#include?“stdafx.h“
#include?“edgecontour.h“
#include?“TemplateTrans.h“
#include?“DIBAPI.h“
#include?
#include?
/*************************************************************************
?*
?*?函數(shù)名稱:
?*???RobertDIB()
?*
?*?參數(shù):
?*???LPSTR?lpDIBBits????-?指向源DIB圖像指針
?*???LONG??lWidth???????-?源圖像寬度(象素?cái)?shù),必須是4的倍數(shù))
?*???LONG??lHeight??????-?源圖像高度(象素?cái)?shù))
?*?返回值:
?*???BOOL???????????????-?邊緣檢測成功返回TRUE,否則返回FALSE。
?*
?*?說明:
?*?該函數(shù)用Robert邊緣檢測算子對圖像進(jìn)行邊緣檢測運(yùn)算。
?*?
?*?要求目標(biāo)圖像為灰度圖像。
?************************************************************************/
BOOL?WINAPI?RobertDIB(LPSTR?lpDIBBits?LONG?lWidth?LONG?lHeight)
{
//?指向源圖像的指針
LPSTR lpSrc;
//?指向緩存圖像的指針
LPSTR lpDst;
//?指向緩存DIB圖像的指針
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;
//循環(huán)變量
long?i;
long?j;
//像素值
double?result;
unsigned?char?pixel[4];
//?暫時(shí)分配內(nèi)存,以保存新圖像
hNewDIBBits?=?LocalAlloc(LHND?lWidth?*?lHeight);
if?(hNewDIBBits?==?NULL)
{
//?分配內(nèi)存失敗
return?FALSE;
}
//?鎖定內(nèi)存
lpNewDIBBits?=?(char?*?)LocalLock(hNewDIBBits);
//?初始化新分配的內(nèi)存,設(shè)定初始值為255
lpDst?=?(char?*)lpNewDIBBits;
memset(lpDst?(BYTE)255?lWidth?*?lHeight);
//使用水平方向的結(jié)構(gòu)元素進(jìn)行腐蝕
for(j?=?lHeight-1;?j?>?0;?j--)
{
for(i?=?0;i? {
//由于使用2×2的模板,為防止越界,所以不處理最下邊和最右邊的兩列像素
//?指向源圖像第j行,第i個(gè)象素的指針
lpSrc?=?(char?*)lpDIBBits?+?lWidth?*?j?+?i;
//?指向目標(biāo)圖像第j行,第i個(gè)象素的指針
lpDst?=?(char?*)lpNewDIBBits?+?lWidth?*?j?+?i;
//取得當(dāng)前指針處2*2區(qū)域的像素值,注意要轉(zhuǎn)換為unsigned?char型
pixel[0]?=?(unsigned?char)*lpSrc;
pixel[1]?=?(unsigned?char)*(lpSrc?+?1);
pixel[2]?=?(unsigned?char)*(lpSrc?-?lWidth);
pixel[3]?=?(unsigned?char)*(lpSrc?-?lWidth?+?1);
//計(jì)算目標(biāo)圖像中的當(dāng)前點(diǎn)
?result?=?sqrt((?pixel[0]?-?pixel[3]?)*(?pixel[0]?-?pixel[3]?)?+?\
??(?pixel[1]?-?pixel[2]?)*(?pixel[1]?-?pixel[2]?));
*lpDst?=?(unsigned?char)result;
}
}
//?復(fù)制腐蝕后的圖像
memcpy(lpDIBBits?lpNewDIBBits?lWidth?*?lHeight);
//?釋放內(nèi)存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
//?返回
return?TRUE;
}
/*************************************************************************
?*
?*?函數(shù)名稱:
?*???SobelDIB()
?*
?*?參數(shù):
?*???LPSTR?lpDIBBits????-?指向源DIB圖像指針
?*???LONG??lWidth???????-?源圖像寬度(象素?cái)?shù),必須是4的倍數(shù))
?*???LONG??lHeight??????-?源圖像高度(象素?cái)?shù))
?*?返回值:
?*???BOOL???????????????-?邊緣檢測成功返回TRUE,否則返回FALSE。
?*
?*?說明:
?*?該函數(shù)用Sobel邊緣檢測算子對圖像進(jìn)行邊緣檢測運(yùn)算。
?*?
?*?要求目標(biāo)圖像為灰度圖像。
?***********************************************
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????22146??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\DIBAPI.obj
?????文件??????25584??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\edgecontour.obj
?????文件??????20195??2008-11-09?19:10??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\MainFrm.obj
?????文件?????151654??2008-11-09?19:10??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.exe
?????文件?????372612??2008-11-09?19:10??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.ilk
?????文件??????23094??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.obj
?????文件????5485732??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.pch
?????文件?????386048??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.pdb
?????文件???????7256??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1.res
?????文件??????35573??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1Doc.obj
?????文件??????25236??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\my1View.obj
?????文件?????105874??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\StdAfx.obj
?????文件???????9350??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\TemplateTrans.obj
?????文件?????205824??2008-11-12?09:30??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\vc60.idb
?????文件?????364544??2008-11-07?18:32??sobel邊緣檢測運(yùn)算(可圖象重建)\Debug\vc60.pdb
?????文件??????29042??2007-06-03?17:37??sobel邊緣檢測運(yùn)算(可圖象重建)\DIBAPI.CPP
?????文件???????1806??2004-10-21?08:48??sobel邊緣檢測運(yùn)算(可圖象重建)\DIBAPI.H
?????文件??????39362??2008-01-03?14:11??sobel邊緣檢測運(yùn)算(可圖象重建)\edgecontour.cpp
?????文件???????1008??2001-02-22?23:18??sobel邊緣檢測運(yùn)算(可圖象重建)\edgecontour.h
?????文件???????2504??2007-06-08?14:05??sobel邊緣檢測運(yùn)算(可圖象重建)\MainFrm.cpp
?????文件???????1581??2007-06-08?14:05??sobel邊緣檢測運(yùn)算(可圖象重建)\MainFrm.h
?????文件??????29000??2008-11-07?18:31??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.aps
?????文件???????2329??2008-11-12?09:31??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.clw
?????文件???????4155??2007-06-08?14:05??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.cpp
?????文件???????4885??2008-01-03?14:11??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.dsp
?????文件????????531??2007-06-08?14:05??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.dsw
?????文件???????1323??2007-06-08?14:05??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.h
?????文件?????164864??2008-11-12?09:32??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.ncb
?????文件??????56832??2008-11-12?09:32??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.opt
?????文件????????779??2008-11-09?19:10??sobel邊緣檢測運(yùn)算(可圖象重建)\my1.plg
............此處省略21個(gè)文件信息
評論
共有 條評論