在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
// 灰度或者二值化彩色图像
procedure GrayImage(Image: TGpImage; Threshold: Single = 0.0); const ColorMatrix: TColorMatrix = ((0.3, 0.3, 0.3, 0.0, 0.0), (0.59, 0.59, 0.59, 0.0, 0.0), (0.11, 0.11, 0.11, 0.0, 0.0), (0.0, 0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 0.0, 1.0)); var Tmp: TGpImage; attr: TGpImageAttributes; g: TGpGraphics; begin Tmp := Image.Clone; g := TGpGraphics.Create(Image); attr := TGpImageAttributes.Create; try attr.SetColorMatrix(ColorMatrix); // 灰度化 if Threshold > 0.0 then // 如果给出了阀值,在灰度图基础上二值化 attr.SetThreshold(Threshold); g.DrawImage(Tmp, GpRect(0, 0, Image.Width, Image.Height), 0, 0, Tmp.Width, Tmp.Height, utPixel, attr); finally g.Free; attr.Free; Tmp.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var Image: TGpImage; g: TGpGraphics; begin Image := TGpImage.Create('..mediaFRUIT.jpg'); g := TGpGraphics.Create(Handle, False); g.DrawImage(Image, 10, 10, Image.Width, Image.Height); GrayImage(Image, 0.5); g.DrawImage(Image, 220, 10, Image.Width, Image.Height); g.Free; image.Free; end;
从例子可以看出,彩色图像二值化,就是在其灰度化基础上给定一个0 - 1之间的阀值,所谓阀值就是每种颜色成分的分界点。假定阈值设置为 0.7,并且假定当前所呈现的颜色中的红色、绿色和蓝色成分分别为 230、50 和 220,那么红色成分 230 大于 0.7x255,因此,红色成分将更改为 255(全亮度);绿色成分 50 小于0.7x255,因此,绿色成分将更改为 0; 蓝色成分 220 大于 0.7x255,因此,蓝色成分将更改为 255。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论