//sobel 算子 3x3
// -1 0 1 1 2 1
// -2 0 2 0 0 0
// -1 0 1 -1 -2 -1
procedure sobel(b : TBitmap);
varb_read : TBitmap;x, y : Integer;wdata , rdata : TBitmapData ;p: PByteArray;p1 , p2 , p3 : PByteArray;temp : array [0..8] of Byte;
beginb_read := TBitmap.Create;b_read.Assign(b);//一个用来修改 w一个用来读取 rif b.Map( TMapAccess.Write,wdata) and b_read.Map( TMapAccess.Read,rdata) thenbeginfor y := 1 to rdata.Height - 2 dobeginp := wdata.GetScanline(y);p1 := rdata.GetScanline(y-1);p2 := rdata.GetScanline(y);p3 := rdata.GetScanline(y+1);for x := 1 to rdata.Width - 2 dobegin//赋值 fp[x*4] := max(abs(p1[x*4+4]+p2[x*4+4]*2+p3[x*4+4]-p1[x*4-4]-p2[x*4-4]*2-p3[x*4-4]),abs(p1[x*4-4]+p1[x*4]*2+p1[x*4+4]-p3[x*4-4]-p3[x*4]*2-p3[x*4+4]));p[x*4+1] := p[x*4];p[x*4+2] := p[x*4];//不透明 bp[x*4+3] := 255;end;end;b.Unmap(wdata);b_read.Unmap(rdata);end;b_read.Destroy;
end;//prewitt 算子 3x3
// -1 0 1 1 1 1
// -1 0 1 0 0 0
// -1 0 1 -1 -1 -1
procedure prewitt(b : TBitmap);
varb_read : TBitmap;x, y : Integer;wdata , rdata : TBitmapData ;p: PByteArray;p1 , p2 , p3 : PByteArray;temp : array [0..8] of Byte;
beginb_read := TBitmap.Create;b_read.Assign(b);//一个用来修改 w一个用来读取 rif b.Map( TMapAccess.Write,wdata) and b_read.Map( TMapAccess.Read,rdata) thenbeginfor y := 1 to rdata.Height - 2 dobeginp := wdata.GetScanline(y);p1 := rdata.GetScanline(y-1);p2 := rdata.GetScanline(y);p3 := rdata.GetScanline(y+1);for x := 1 to rdata.Width - 2 dobegin//赋值 fp[x*4] := max(abs(p1[x*4+4]+p2[x*4+4]+p3[x*4+4]-p1[x*4-4]-p2[x*4-4]-p3[x*4-4]),abs(p1[x*4-4]+p1[x*4]+p1[x*4+4]-p3[x*4-4]-p3[x*4]-p3[x*4+4]));p[x*4+1] := p[x*4];p[x*4+2] := p[x*4];//不透明 bp[x*4+3] := 255;end;end;b.Unmap(wdata);b_read.Unmap(rdata);end;b_read.Destroy;
end;//robert 算子 2x2
// 1 0 0 1
// 0 -1 -1 0
procedure robert(b : TBitmap);
varb_read : TBitmap;x, y : Integer;wdata , rdata : TBitmapData ;p: PByteArray;p1 , p2 : PByteArray;
beginb_read := TBitmap.Create;b_read.Assign(b);//一个用来修改 w一个用来读取 rif b.Map( TMapAccess.Write,wdata) and b_read.Map( TMapAccess.Read,rdata) thenbeginfor y := 1 to rdata.Height - 2 dobeginp := wdata.GetScanline(y);p1 := rdata.GetScanline(y-1);p2 := rdata.GetScanline(y);for x := 1 to rdata.Width - 2 dobegin//赋值 fp[x*4] := max(abs(p2[x*4-4]-p1[x*4]),abs(p1[x*4]-p2[x*4]));p[x*4+1] := p[x*4];p[x*4+2] := p[x*4];//不透明 bp[x*4+3] := 255;end;end;b.Unmap(wdata);b_read.Unmap(rdata);end;b_read.Destroy;
end;
详细解决方案
delphi FMX图像简单的边缘检测(sobel、prewitt、robert)
热度:4 发布时间:2023-12-13 05:30:00.0
相关解决方案
- delphi/java base 技术论坛。给大伙一个交流空间
- DELPHI 中怎么让LISTBOX控件显示SQL的数据库中所有的表名和让COMBOBOX控件显示数据库名的有关问题!
- Delphi 求指点
- delphi:webbrowser作浏览器时,获取当前网页缩放比率
- makespellcode 函数的引述单元 delphi
- Delphi Prism 2010运用的语言是delphi么,已经用DelphiDistiller破解delphi2010的机器还需要单独破解Prism
- delphi.net 语言,怎的实现批复制
- Delphi.Net 好用吗?解决方法
- delphi.net版会编DELPHI7的程序么?就是不需要.NET框架的程序
- 请教哪里有 delphi 2006 上载?小弟我想学DELPHI .NET
- delphi.net 要学其他语言吗? 还是直接用DELPHI 语言解决思路
- C# 调用 delphi 编纂的接口函数文件
- 粗浅点讲,Delphi.net到底是怎样
- Delphi 跟 C#之间的选择
- delphi 可不可以实现var A : array [1.10] of Integer = (1,2,3,4,5,6,7,8,9)
- delphi 7.0加载 Raize 5.0 老是报序列号不对,不为什么
- delphi prism 2011发布了解决方法
- Delphi 调用C#的DLL 和调用C++的DLL,有什么区别吗?那个更简单?该怎么解决
- delphi Tree解决方法
- delphi.net能进行CORBA的开发吗?该如何处理
- delphi 绘图解决思路
- delphi.net板块很冷清清啊
- delphi.net能开展CORBA的开发吗
- delphi 第三方控件 cxTreeList 如何把读数据库数据
- 客户端与服务器的连接有关问题(delphi)
- DELPHI +SQL SERVER 2005 掉线 急该如何处理
- delphi 里面如何检测com口是不是存在
- 请教:delphi 2006 asp.net 怎么连接SYBASE数据库?[急]
- Turbo Delphi.net 新建Asp.net程序出现的有关问题
- [原创]作点贡献:delphi.net 利用eco建立web程序视频教程