因为要做毕业设计了,实在不愿意去写这点代码了,理论是先对图片二值化,然后进行滤波去噪处理,最后计算面积,大概的算法是聚类分析!希望高手给点代码,应该有兄弟做过,200分只给那个给代码的兄弟!谢谢 错了,是还有两百分!另外,也可以去我得博客,如果调试正确,我赠送100M免费PHP + MYSQL空间,我个人的服务器!www.libing.net.cn
致谢!

解决方案 »

  1.   

    LZ,毕业设计你就自己做点事啦!这还找人替,郁闷。bs...
      

  2.   

    二值化:procedure TForm1.Button2Click(Sender: TObject);
    var
        p: PByteArray;
        Gray, x, y: Integer;
        Bmp: TBitmap;
    begin
        Bmp := TBitmap.Create;
        Bmp.Assign(Image1.Picture.Bitmap);
        //设置为24位真彩色
        Bmp.PixelFormat := pf24Bit;
        randomize;
        for y := 0 to Bmp.Height - 1 do
        begin
            p := Bmp.scanline[y];
            for x := 0 to Bmp.Width - 1 do
            begin
                //一个象素点三个字节
                Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x
                    * 3] * 0.11);
                if gray > 128 then //全局阀值128
                begin
                    p[x * 3] := 255;
                    p[x * 3 + 1] := 255;
                    p[x * 3 + 2] := 255;
                end
                else
                begin
                    p[x * 3] := 0;
                    p[x * 3 + 1] := 0;
                    p[x * 3 + 2] := 0;
                end;
            end;
        end;
        Image2.Picture.Bitmap.Assign(Bmp);
        Bmp.Free;end;
      

  3.   

    中值滤波:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Image1: TImage;
        Image2: TImage;
        procedure Button1Click(Sender: TObject);
        procedure SelectionSort(var a: array of integer);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      RvalueArray, GvalueArray, BvalueArray: array[0..8] of integer;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      bmp1, bmp2: Tbitmap;
      p1, p2, p3, p4: pbytearray;
      i, j: integer;
    begin
      //设置双缓冲
      self.DoubleBuffered := true;
      //创建两个位图实例
      bmp1 := Tbitmap.Create;
      bmp2 := Tbitmap.Create;
      //加在位图
      bmp1.Assign(image1.Picture.Bitmap);
      //设置位图的象素格式
      bmp1.PixelFormat := pf24bit;
      //位图的大小
      bmp1.Width := image1.Picture.Graphic.Width;
      bmp1.Height := image1.Picture.Graphic.Height;
      //加载备份的位图
      bmp2.Assign(image1.Picture.Bitmap);
      bmp2.PixelFormat := pf24bit;
      for j := 1 to bmp1.Height - 2 do
      begin
        //三条扫描线
        p1 := bmp1.ScanLine[j];
        p2 := bmp2.ScanLine[j - 1];
        p3 := bmp2.ScanLine[j];
        p4 := bmp2.ScanLine[j + 1];
        for i := 1 to bmp1.Width - 2 do
        begin
          //对存储9个R分量的数组进行赋值
          RvalueArray[0] := p2[3 * (i - 1) + 2];
          RvalueArray[1] := p2[3 * i + 2];
          RvalueArray[2] := p2[3 * (i + 1) + 2];
          RvalueArray[3] := p3[3 * (i - 1) + 2];
          RvalueArray[4] := p3[3 * i + 2];
          RvalueArray[5] := p3[3 * (i + 1) + 2];
          RvalueArray[6] := p4[3 * (i - 1) + 2];
          RvalueArray[7] := p4[3 * i + 2];
          RvalueArray[8] := p4[3 * (i + 1) + 2];
          //调用排序过程
          SelectionSort(RvalueArray);
          //获取R分量的中间值
          p1[3 * i + 2] := RvalueArray[4];
          //对存储9个G分量的数组进行赋值
          GvalueArray[0] := p2[3 * (i - 1) + 1];
          GvalueArray[1] := p2[3 * i + 1];
          GvalueArray[2] := p2[3 * (i + 1) + 1];
          GvalueArray[3] := p3[3 * (i - 1) + 1];
          GvalueArray[4] := p3[3 * i + 1];
          GvalueArray[5] := p3[3 * (i + 1) + 1];
          GvalueArray[6] := p4[3 * (i - 1) + 1];
          GvalueArray[7] := p4[3 * i + 1];
          GvalueArray[8] := p4[3 * (i + 1) + 1];
          //调用选择排序
          SelectionSort(RvalueArray);
          //获取G分量的中间值
          p1[3 * i + 1] := RvalueArray[4];
          //对存储9个B分量的数组进行赋值
          BvalueArray[0] := p2[3 * (i - 1)];
          BvalueArray[1] := p2[3 * i];
          BvalueArray[2] := p2[3 * (i + 1)];
          BvalueArray[3] := p3[3 * (i - 1)];
          BvalueArray[4] := p3[3 * i];
          BvalueArray[5] := p3[3 * (i + 1)];
          BvalueArray[6] := p4[3 * (i - 1)];
          BvalueArray[7] := p4[3 * i];
          BvalueArray[8] := p4[3 * (i + 1)];
          //调用选择排序过程
          SelectionSort(RvalueArray);
          //获取G分量的中间值
          p1[3 * i] := RvalueArray[4];
        end;
      end;
      Image2.Picture.Bitmap.Assign(Bmp1);
      Bmp1.Free;
      bmp2.Free;
    end;
    //选择排序过程procedure TForm1.SelectionSort(var a: array of integer);
    var
      i, j, t: integer;
    begin
      for i := low(a) to high(a) - 1 do
        for j := high(a) downto i + 1 do
          if a[i] > a[j] then
          begin
            //交换值(a[i], a[j], i, j);
            t := a[i];
            a[i] := a[j];
            a[j] := t;
          end;
    end;end.
      

  4.   

    汗一个,让大家BS了!其实我还是很勤快的!那大家接着BS吧
      

  5.   

    基本搞定!
    如果关心请看我得博客!
    www.libing.net.cn
      

  6.   

    //计算多边形面积
    Function TNetMap.GetPolygonArea(G:TMapPolygon):Double;
    Var I:Integer;
        Area:Double;
    Begin
         Area:=0;
         For I:=G.D_Start To G.D_End-1 Do
             Area:=Area+SData[I].X*SData[I+1].Y-SData[I+1].X*SData[I].Y;
         Area:=Area+SData[G.D_End].X*SData[G.D_Start].Y-SData[G.D_Start].X*SData[G.D_End].Y;
         Area:=Abs(Area/2);
         Result:=Area;
    End;