社区
图形处理/算法
帖子详情
求二值图像、灰度图象的腐蚀与膨胀算法!
maplewasp
2006-11-27 10:48:21
求二值图像、灰度图象的腐蚀与膨胀算法!有源程序最好!
谢谢先!
...全文
801
5
打赏
收藏
求二值图像、灰度图象的腐蚀与膨胀算法!
求二值图像、灰度图象的腐蚀与膨胀算法!有源程序最好! 谢谢先!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iohui
2006-11-29
打赏
举报
回复
膨胀
void Dilation(HANDLE hDIB)
{
LPBITMAPINFOHEADER lpbi;
int height;
int width;
WORD wBytesPerLine;
LPBYTE lpData;
LPBYTE lpTemp;
long lOffset;
//得到图象的基本信息
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
height = lpbi->biHeight;
width = lpbi->biWidth;
wBytesPerLine = this->BytePerLine(hDIB);
lpData = this->FindDIBBits(hDIB);
//申请一块和数据区大小相同的内存
lpTemp = (LPBYTE) new BYTE[wBytesPerLine * height];
long lOffsetJudge;
int i;
for (i=1; i<height-1; i++)
for (int j=1; j<width-1; j++)
{
lOffset = this->PixelOffset(i, j, wBytesPerLine);
//如果当前点为白色,接着循环
if(*(lpData + lOffset) == 255)
{
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
continue;
}
//否则考察上下左右四个点
else
{
lOffsetJudge = this->PixelOffset(i-1, j, wBytesPerLine);
//如果上面的点为白色
if(*(lpData + lOffsetJudge) == 255)
{ //设置为白色,并继续循环
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
continue;
}
//考察下面的点
lOffsetJudge = this->PixelOffset(i+1,j, wBytesPerLine);
if(*(lpData + lOffsetJudge) == 255)
{
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
continue;
}
//考察左边的点
lOffsetJudge = this->PixelOffset(i,j-1, wBytesPerLine);
if(*(lpData + lOffsetJudge) == 255)
{
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
continue;
}
//考察右边的点
lOffsetJudge = this->PixelOffset(i,j+1, wBytesPerLine);
if(*(lpData + lOffsetJudge) == 255)
{
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
*(lpTemp + lOffset++) = 255;
continue;
}
//如果上下左右都是黑色点,则把暂时区域的点设置为黑色
lOffset = this->PixelOffset(i,j,wBytesPerLine);
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
}
}
//处理图象四周的点,设置为黑色
for(i=0; i<height; i++)
{
lOffset = this->PixelOffset(i, 0, wBytesPerLine);
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
}
}
for(i=0; i<height; i++)
{
lOffset = this->PixelOffset(i, width-1, wBytesPerLine);
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
}
}
for(i=0; i<width; i++)
{
lOffset = this->PixelOffset(0, i, wBytesPerLine);
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
}
}
for(i=0; i<width; i++)
{
lOffset = this->PixelOffset(height-1, i, wBytesPerLine);
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
}
}
//把暂时区域的点拷贝到原句柄区域下面
memcpy(lpData, lpTemp, wBytesPerLine*height);
delete [] lpTemp;
GlobalUnlock(hDIB);
}
iohui
2006-11-29
打赏
举报
回复
腐蚀
void Erasion(HANDLE hDIB)
{
LPBITMAPINFOHEADER lpbi;
LPBYTE lpData;
WORD wBytesPerLine;
long lOffset;
long lOffsetJudge;
int height;
int width;
//得到基本数据
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
height = lpbi->biHeight;
width = lpbi->biWidth;
wBytesPerLine = BytePerLine(hDIB);
lpData = FindDIBBits(hDIB);
HANDLE hTempDIB;
LPBYTE lpTemp;
//申请同样大小的内存
hTempDIB = GlobalAlloc(GMEM_MOVEABLE,(DWORD)(sizeof(BITMAPINFOHEADER) + wBytesPerLine*height));
//判断内存情况
if(!hTempDIB)
{
GlobalFree(hTempDIB);
GlobalFree(hDIB);
return;
}
lpTemp = (LPBYTE)GlobalLock(hTempDIB);
lpTemp+= sizeof(BITMAPINFOHEADER);
//下面的循环实现腐蚀功能
for (int i=1; i<height-1; i++)
for (int j=1; j<width-1; j++)
{
lOffset = PixelOffset(i,j,wBytesPerLine);
//如果为白色点
if (*(lpData+lOffset) == 255)
{
//考察上面的点
lOffsetJudge = PixelOffset(i-1, j, wBytesPerLine);
//如果是黑色就把原来的点设置为黑色,并接着循环
if (*(lpData + lOffsetJudge) ==0)
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
continue;
}
//考察下面的点
lOffsetJudge = PixelOffset(i+1, j, wBytesPerLine);
if (*(lpData + lOffsetJudge) ==0)
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
continue;
}
//左面的点
lOffsetJudge = PixelOffset(i, j-1, wBytesPerLine);
if (*(lpData + lOffsetJudge) ==0)
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
continue;
}
//右面的点
lOffsetJudge = PixelOffset(i, j+1, wBytesPerLine);
if (*(lpData + lOffsetJudge) ==0)
{
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
*(lpTemp + lOffset++) = 0;
continue;
}
//如果上下左右四个点都是白色,则设置为白色
lOffset = this->PixelOffset(i, j, wBytesPerLine);
*(lpTemp + lOffset) = 255;
*(lpTemp + lOffset+1) = 255;
*(lpTemp + lOffset+2) = 255;
}
//如果当前点为黑色,则在暂时的目标区域中设置为黑色
else
{
*(lpTemp + lOffset) = 0;
*(lpTemp + lOffset+1) = 0;
*(lpTemp + lOffset+2) = 0;
}
}
//把图象周边的点全部设置为黑色
for(i=0; i<height; i++)
{
lOffset = PixelOffset(i, 0, wBytesPerLine);
*(lpTemp + lOffset) = 0;
*(lpTemp + lOffset+1) = 0;
*(lpTemp + lOffset+2) = 0;
}
for(i=0; i<height; i++)
{
lOffset = PixelOffset(i, width-1, wBytesPerLine);
*(lpTemp + lOffset) = 0;
*(lpTemp + lOffset+1) = 0;
*(lpTemp + lOffset+2) = 0;
}
for (i=0; i<width; i++)
{
lOffset = PixelOffset(0, i, wBytesPerLine);
*(lpTemp + lOffset) = 0;
*(lpTemp + lOffset+1) = 0;
*(lpTemp + lOffset+2) = 0;
}
for (i=0; i<width; i++)
{
lOffset = PixelOffset(height-1, i, wBytesPerLine);
*(lpTemp + lOffset) = 0;
*(lpTemp + lOffset+1) = 0;
*(lpTemp + lOffset+2) = 0;
}
//把暂时区域的数值拷贝到原来的句柄下面
memcpy(lpData,lpTemp,wBytesPerLine*height);
GlobalUnlock(hDIB);
GlobalUnlock(hTempDIB);
GlobalFree(hTempDIB);
}
maplewasp
2006-11-28
打赏
举报
回复
我模仿CxImage里的Erode和Dilate两函数,但是始终不成功,不知道为什么?
还想问一下,CxImage里的这两个算法的效果怎么样?
脆弱的肠胃
2006-11-28
打赏
举报
回复
同意,但是算法不算高效
HUNTON
2006-11-28
打赏
举报
回复
找一本图形的书来,里面一般都有这些的。
灰度图
象
的
腐蚀
算法
c语言版的
灰度图
象
的
腐蚀
算法
c语言版的,有需要的可以下载去看看
C++实现
灰度图
像的
腐蚀
、
膨胀
、细化运算
C++实现
灰度图
像的
腐蚀
、
膨胀
、细化运算(bmp
灰度图
片),vc6.0运行无误
图像相关
算法
与图像相关的
算法
,全部从零开始写,入门级别, 例如:RGB 转
灰度图
, 图像的
膨胀
腐蚀
,图像的卷积,图像模糊,图像降噪,边缘提取等。 一些与图像相关的
算法
,例如: fast角点提取, brief,surf,特征点匹配等
腐蚀
膨胀
算法
对
灰度图
象
去躁的应用
传统的
腐蚀
膨胀
算法
会在一定层度上改变图像,为消除这一影响,在该
算法
基础上又设计了一种对比采样的方法,将原图像与初步处理过的图像进行对比,得到最终图像。结果表明在:此方法能够在基本不改变原图的情况下有效...
图形图
象
类代码.zip
贝赛尔纽曼函数绘图代码,产生水纹、火焰及熔岩效果示例, 3DS动画文件阅读器源代码,JPEG处理源代码 ,图
象
腐蚀
,
膨胀
,细化
算法
,图
象
的检测,模板匹配
算法
代码,JPEG压缩编码,图
象
的几何变换
算法
,图
象
平滑处理...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章