Lazarus下图片轮廓处理

                                               Lazarus下图片轮廓处理

                                                                                                 Lis    2021-2-4

处理思路: 对图像进行二值化处理后,再进行多个方向的关联对比.

Lazarus Delphi的代码在处理方面,还有细微的不一样,网上你能找到的在delphi下做这方面的处理的示例程序,一般情况下是没有办法直接在Lazarus下编译通的。

图中的图片为32bits,在处理速度上相对还是可以。

Win_DSPack是Lazarus下一套非常棒的摄像头采集组件,让你可以快速方便的连接USB摄像头,进行视频流的采集工作,下次我会专门说说这个组件。

Lazarus的IDE界面几乎和Delphi7.0一样. 良好支持Linux,MAC平台。

[1]灰度处理, 当然这一步可以直接和二值化处理归在一起,我这里放一起是为了让大家更容易解理。

[2]二值化处理

[3]标注封闭区域

[4]如果把封闭区域改成和白色,就可以得到轮廓图了

[5]关键代码部分

type
  Trgb24 = packed record
    b,g,r,a : byte;
  end;
  Trgb24scanline = array [word] of Trgb24;
  pTrgb24scanline = ^Trgb24scanline;  
end;
//-------------------------------------------------

procedure GetFigure(Bitmap: TBitmap);
var
   b0: Tbitmap;
   i, j: Integer;
   p1, p2, p3, p4: pTrgb24scanline;
begin
   b0 := Tbitmap.Create;
   b0.Assign(Bitmap);
   b0.BeginUpdate();
   Bitmap.BeginUpdate();

   for i := 1 to b0.Height - 2 do
   begin
      p1 := b0.ScanLine[i - 1];
      p2 := b0.ScanLine[i];
      p3 := b0.ScanLine[i + 1];
      p4 := Bitmap.ScanLine[i];
      for j := 1 to b0.Width - 2 do
      begin
         if (p2^[j].b = 0) and (p2^[j].g = 0) and (p2^[j].r = 0) then
         begin
            if ((p2^[j-1].b = 0) and (p2^[j-1].g = 0) and (p2^[j-1].r = 0)) and
               ((p2^[j+1].b = 0) and (p2^[j+1].g = 0) and (p2^[j+1].r = 0)) and
               ((p1^[j+1].b = 0) and (p1^[j+1].g = 0) and (p1^[j+1].r = 0)) and
               ((p1^[j].b = 0) and (p1^[j].g = 0) and (p1^[j].r = 0)) and
               ((p1^[j-1].b = 0) and (p1^[j-1].g = 0) and (p1^[j-1].r = 0)) and
               ((p3^[j-1].b = 0) and (p3^[j-1].g = 0) and (p3^[j-1].r = 0)) and
               ((p3^[j].b = 0) and (p3^[j].g = 0) and (p3^[j].r = 0)) and
               ((p3^[j+1].b = 0) and (p3^[j+1].g = 0) and (p3^[j+1].r = 0))then
            begin
               p4^[j].b := 0;
               p4^[j].g := 0;
               p4^[j].r:= 255;
            end;
         end;
      end;
   end;
   Bitmap.EndUpdate();
   b0.EndUpdate();
   b0.Free;
end; 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Lazarus SQLite 是一个供 Lazarus 开发环境使用的轻量级数据库管理系统。SQLite 是一种嵌入式数据库,可以在没有服务器的情况下直接访问和操作数据库文件。 Lazarus 是一个跨平台的集成开发环境,主要用于 Free Pascal 编程语言。它支持多种操作系统,如 Windows、Linux 和 Mac OS X,并提供了开发图形用户界面(GUI)应用程序所需的各种工具和组件。 借助 Lazarus SQLite,开发者可以在他们的 Lazarus 项目中使用数据库功能。SQLite 是一个零配置、零管理的数据库引擎,非常适合嵌入式场景和小规模应用程序。使用 Lazarus SQLite,开发者可以无需安装或配置额外的数据库服务器,直接在程序中进行数据库操作。 Lazarus SQLite 提供了一组用于连接和操作 SQLite 数据库的组件和接口。开发者可以使用这些组件来创建、修改和查询数据库,执行 SQL 语句,以及处理数据库连接和事务等操作。Lazarus SQLite 具有简单易用的 API,程序员可以方便地操作 SQLite 数据库,实现数据的存取、修改和查询等功能。 与传统的关系型数据库相比,SQLite 是非常轻量级和灵活的。它的数据库文件以单个文件的形式存在,可以直接进行复制和传输。同时,SQLite 还支持事务处理、数据完整性控制和查询优化等一系列高级功能,可以满足多种应用场景的需求。 总之,Lazarus SQLite 提供了方便、快捷的数据库管理功能,支持开发者在 Lazarus 开发环境中进行 SQLite 数据库相关的操作。无论是开发小型应用程序还是嵌入式设备,Lazarus SQLite 都是一个理想的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijinjie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值