比如起点是图中蓝色的地方。
然后我要获取一段(长度不定的)黑白交接的坐标,图中我已经用红色线标记出来了。请问如何用代码实现?获取红色这个路线的所有坐标?求代码,或思路,谢谢。``````UP有分   结贴率100%
Image1.canvas.Pixels[1,1]  这样就是获取1,1坐标的颜色是 黑色

解决方案 »

  1.   

    建边缘检测器。。轮廓处理的代码。
    具体的你看下数字图像处理的书。 《Delphi数字图像处理及高级应用》
    var
       b0, b1: Tbitmap;
       i, j: Integer;
       p1, p2, p3, p4: pbyteArray;
    begin
       b0 := Tbitmap.Create;
       b1 := Tbitmap.Create;
       b0.Assign(Image1.Picture.Bitmap);
       b1.Assign(Image1.Picture.Bitmap);
       b0.PixelFormat := pf24bit;
       b1.PixelFormat := pf24bit;
       for i := 1 to b0.Height - 2 do
       begin
          p1 := b0.ScanLine[i - 1];
          p2 := b0.ScanLine[i];
          p3 := b0.ScanLine[i + 1];
          p4 := b1.ScanLine[i];
          for j := 1 to b0.Width - 2 do
          begin
             if (p2[3 * j + 2] = 0) and (p2[3 * j + 1] = 0) and (p2[3 * j] = 0) then
             begin            if ((p2[3 * (j - 1) + 2] = 0) and (p2[3 * (j - 1) + 1] = 0) and
                   (p2[3 * (j - 1)] = 0)) and
                ((p2[3 * (j + 1) + 2] = 0) and (p2[3 * (j + 1) + 1] = 0) and
                   (p2[3 * (j + 1)] = 0)) and
                ((p1[3 * (j + 1) + 2] = 0) and (p1[3 * (j + 1) + 1] = 0) and
                   (p1[3 * (j + 1)] = 0)) and
                ((p1[3 * (j) + 2] = 0) and (p1[3 * (j) + 1] = 0) and (p1[3 * (j)]
                   = 0)) and
                ((p1[3 * (j - 1) + 2] = 0) and (p1[3 * (j - 1) + 1] = 0) and
                   (p1[3 * (j - 1)] = 0)) and
                ((p3[3 * (j - 1) + 2] = 0) and (p3[3 * (j - 1) + 1] = 0) and
                   (p3[3 * (j - 1)] = 0)) and
                ((p3[3 * (j) + 2] = 0) and (p3[3 * (j) + 1] = 0) and (p3[3 * (j)]
                   = 0)) and
                ((p3[3 * (j + 1) + 2] = 0) and (p3[3 * (j + 1) + 1] = 0) and
                   (p3[3 * (j + 1)] = 0)) then
                begin
                   p4[3 * j + 2] := 255;
                   p4[3 * j + 1] := 255;
                   p4[3 * j] := 255;
                end;
             end;      end;
          Image1.Picture.Bitmap.Assign(b1);
       end;
       b1.Free;
       b0.Free;