//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 中怎么让LISTBOX控件显示SQL的数据库中所有的表名和让COMBOBOX控件显示数据库名的有关问题!
- Delphi 求指点
- delphi:webbrowser作浏览器时,获取当前网页缩放比率
- makespellcode 函数的引述单元 delphi
- C# 调用 delphi 编纂的接口函数文件
- delphi 7.0加载 Raize 5.0 老是报序列号不对,不为什么
- delphi Tree解决方法
- delphi 绘图解决思路
- 客户端与服务器的连接有关问题(delphi)
- DELPHI +SQL SERVER 2005 掉线 急该如何处理
- delphi 里面如何检测com口是不是存在
- Delphi 2005安装包 小弟我这里有 哪位高手需要留言 刚学有经验的指导上
- Delphi MDI加载dll的有关问题()
- delphi Tree解决思路
- delphi 7.0加载 Raize 5.0 总是报序列号不对,不为什么?解决方案
- C# 调用 delphi 编写的接口函数文件,该怎么解决
- delphi 7操作EXCEL有关问题
- delphi 6.0 money类型提示 应用程序在当前操作中使用了异常类型的值
- Delphi 怎么获取webbrowser中页面表单的内容并实现赋值
- delphi SQL数据库
- delphi:webbrowser做浏览器时,获取当前网页缩放比率解决思路
- delphi 绘图,该怎么处理
- delphi webservice对接有关问题
- Visio delphi 二次开发 500分解决方法
- DELPHI 怎么来判断WORD中文章中的某段分了几栏
- delphi 操作excel设置图表属性 在运行时报“不能设置类chart的HasTitle属性”错,该怎么解决
- Delphi+Sybase 出现 ct_cmd_drop(): user api layer: external error: The connection,该怎么解决
- delphi 数据库,该怎么解决
- delphi 用canvas画的为啥会消失
- delphi 绘图如何显示全