请问大家有没有图象处理方面的程序示例,谢谢了。
比如给出一幅图象 求灰度图
图象除噪声
滤波等
非常,非常,非常,万分感谢帮助。谢谢
比如给出一幅图象 求灰度图
图象除噪声
滤波等
非常,非常,非常,万分感谢帮助。谢谢
解决方案 »
- delphi如何将含中文的字符串转换为unicode编码的byte array? 求助。
- 程序越编越大,修改时只是面对一大堆代码翻来翻去很不方便,到底写软件走怎样的路子才对,修改才容易?是从需求分析-概要设计-详细设计-...这样走下去呢,还是随便一点好呢。哪有一个开发模式可供参考参考,从分析到设计再到实现、测试等。怎样才能理清开发思路,修
- 时间字段的 查询!
- 请问那里有下载mssql?
- 我想去北京工作大家看看我值多少钱
- 怪问题—关于三层结构?
- 懂DELPHI的朋友请进来帮个忙(非常感谢)
- 有人在看李维《delphi 5.x ADO/MTS/COM+高级程序设计篇》吗?有个问题,研究一下!
- vc和delphi那一个更强大?
- 关于Tstrings的使用
- 紧急救助!
- 请解决我程序中出现的问题(此时我在线:2月13号7点开始)
procedure ConvertToGrayGraphic(var Bmp: TBitmap);
var
p :PByteArray;
Gray,x,y :Integer;
begin
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);
p[x*3]:=Gray;
p[x*3+1]:=Gray;
p[x*3+2]:=Gray;
end;
end;
end;
//中值滤波:
procedure TFrmSmoothing.N4Click(Sender: TObject);
var
i,j , s, nTotal, nResult: integer;
ii, jj ,nTemp : integer;
m : array [1..30] of integer;
k : array [1..30] of integer;
begin
for i := 2 to Image1.Picture.Width-1 do
for j :=2 to Image1.Picture.Height-1 do
begin
m[1] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j-1]));
m[2] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j-1]));
m[3] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j-1]));
m[4] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j]));
m[5] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j]));
m[6] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j]));
m[7] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i-1,j+1]));
m[8] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i,j+1]));
m[9] := GetRValue(ColorToRGB(Image1.Canvas.Pixels[i+1,j+1]));
for ii:=1 to 8 do //冒泡排序
for jj :=ii to 8 do
begin
if m[jj] > m[jj+1] then
begin
nTemp :=m[jj];
m[jj] := m[jj+1];
m[jj+1] :=nTemp;
end;
end;
nResult := m[5];
Canvas.Pixels[i+320,j] := RGB(nResult,nResult,nResult);
end;end;
//使用模板滤波
procedure TFrmSmoothing.N2Click(Sender: TObject);
var
i,j , s, nTotal, nResult: integer;
m : array [1..30] of integer;
k : array [1..30] of integer;
begin
k[1] := StrToInt(Edit1.text);
k[2] := StrToInt(Edit2.text);
k[3] := StrToInt(Edit3.text);
k[4] := StrToInt(Edit4.text);
k[5] := StrToInt(Edit5.text);
k[6] := StrToInt(Edit6.text);
k[7] := StrToInt(Edit7.text);
k[8] := StrToInt(Edit8.text);
k[9] := StrToInt(Edit9.text);
nTotal := 0;
for i:=1 to 9 do
nTotal := nTotal + k[i]; for i := 1 to min(328 ,Image1.Picture.Width) do
for j :=1 to min(328 ,Image1.Picture.Height) do
begin
m[1] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j-1]));
m[2] := GetRValue(ColorToRGB(Canvas.Pixels[i,j-1]));
m[3] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j-1]));
m[4] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j]));
m[5] := GetRValue(ColorToRGB(Canvas.Pixels[i,j]));
m[6] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j]));
m[7] := GetRValue(ColorToRGB(Canvas.Pixels[i-1,j+1]));
m[8] := GetRValue(ColorToRGB(Canvas.Pixels[i,j+1]));
m[9] := GetRValue(ColorToRGB(Canvas.Pixels[i+1,j+1]));
nResult := m[1]*k[1]+ m[2]*k[2]+ m[3]*k[3]+ m[4]*k[4]+ m[5]*k[5]+
m[6]*k[6]+ m[7]*k[7]+ m[8]*k[8]+ m[9]*k[9];
if nTotal<>0 then nResult := nResult div nTotal;
Canvas.Pixels[i+320,j] := RGB(nResult,nResult,nResult);
end;end;
转贴:
暗淡或者灰度一个图片:
function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
var
r, g, b: integer;begin
if Value > 100 then Value := 100;
clr := ColorToRGB(clr);
r := Clr and $000000FF;
g := (Clr and $0000FF00) shr 8;
b := (Clr and $00FF0000) shr 16; r := r + Round((255 - r) * (value / 100));
g := g + Round((255 - g) * (value / 100));
b := b + Round((255 - b) * (value / 100)); Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
end;procedure DimBitmap(ABitmap: TBitmap; Value: integer);
var
x, y: integer;
LastColor1, LastColor2, Color: TColor;
begin
if Value > 100 then Value := 100;
LastColor1 := -1;
LastColor2 := -1; for y := 0 to ABitmap.Height - 1 do
for x := 0 to ABitmap.Width - 1 do
begin
Color := ABitmap.Canvas.Pixels[x, y];
if Color = LastColor1 then
ABitmap.Canvas.Pixels[x, y] := LastColor2
else
begin
LastColor2 := NewColor(ABitmap.Canvas, Color, Value);
ABitmap.Canvas.Pixels[x, y] := LastColor2;
LastColor1 := Color;
end;
end;
end;function GrayColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
var
r, g, b, avg: integer;begin
if Value > 100 then Value := 100;
clr := ColorToRGB(clr);
r := Clr and $000000FF;
g := (Clr and $0000FF00) shr 8;
b := (Clr and $00FF0000) shr 16; Avg := (r + g + b) div 3;
Avg := Avg + Value; if Avg > 240 then Avg := 240; Result := Windows.GetNearestColor(ACanvas.Handle, RGB(Avg, avg, avg));
end;procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
var
x, y: integer;
LastColor1, LastColor2, Color: TColor;
begin
LastColor1 := 0;
LastColor2 := 0; for y := 0 to ABitmap.Height do
for x := 0 to ABitmap.Width do
begin
Color := ABitmap.Canvas.Pixels[x, y];
if Color = LastColor1 then
ABitmap.Canvas.Pixels[x, y] := LastColor2
else
begin
LastColor2 := GrayColor(ABitmap.Canvas, Color, Value);
ABitmap.Canvas.Pixels[x, y] := LastColor2;
LastColor1 := Color;
end;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
NewBitmap:tbitmap;
i,j:integer;
kl:longint;
rr,gg,bb:byte;
res:byte;
begin
NewBitmap:=tbitmap.create;
NewBitmap.Width:=image1.Width;
NewBitmap.height:=image1.height;
ProgressBar1.Max:=image1.Width+1;
for i:=0 to image1.Width+1 do
begin
for j:=0 to image1.height+1 do
begin
kl:=ColorToRGB(image1.Canvas.Pixels[i,j]);
rr:=byte(kl);
gg:=byte(kl shr 8);
bb:=byte(kl shr 8);
res:=(rr+gg+bb) div 3;
NewBitmap.Canvas.Pixels[i,j]:=rgb(res,res,res);
end;
ProgressBar1.Position:=i;
end;//for do
Image1.Canvas.Draw(0,0,NewBitmap);
NewBitmap.free;
end;
end.