如何用ScanLine对图像进行二值化(10分)

  • 主题发起人 主题发起人 chenliyan163
  • 开始时间 开始时间
C

chenliyan163

Unregistered / Unconfirmed
GUEST, unregistred user!
我这儿有个源代码(运算速度太慢
procedure TForm1.N4Click(Sender: TObject);
var i,j,c,l,r,g,b:integer;
begin
l:=((255+255+255) *TrackBar1.Position) div 100;
for i:=0 to image1.Width do
for j:=0 to image1.Height do
begin
c:=image1.canvas.pixels[i,j];
r:=c shr 16;
g:=(c shr 8) mod 256;
b:=c mod 256;
if r+g+b>=l then
// image1.canvas.pixels[i,j]:=clRed
else
image1.canvas.pixels[i,j]:=clRed; // 0
end;
end;)
用ScanLine怎么写
 
const
red: cardinal = $FF;
blue: cardinal = $FF0000;
var
rgb: integer;
i, j, l: Integer;
begin
l:=((255+255+255) *TrackBar1.Position) div 100;
for i := 0 to image1.picture.bitmap.height-1 do
begin
rgb := integer(image1.picture.bitmap.scanline);
for j := 0 to image1.picture.bitmap.width-1 do
begin
if pbyte(rgb)^+pbyte(rgb+1)^+pbyte(rgb+2)^>l then
move(red, pbyte(rgb)^, 3)
else move(blue, pbyte(rgb)^, 3);
inc(rgb, 3);
end;
end;
end;
 
这位仁兄,您有没有试过,我试了一下,二值化前跟二值化后,都是一样的,我改了TrackBar1.Position的值也没用
 
哦,我知道了,少了一条语句,form1.Refresh;
 

Similar threads

后退
顶部